使用sklearn中的決策樹對乳腺癌的分類診斷(下)

前面我們做的關於決策樹的代碼實現是對一個數據集進行劃分爲訓練集和測試集,這篇使用的訓練集和測試集是已經幫你劃分好的存放在二個文件裏的。

這裏我們使用的訓練集和測試集都是關於乳腺癌的數據集,但是和前面我們使用的乳腺癌數據集有點不一樣,前面的是二分類的問題:良性和惡性,我們這是四分類問題,類別是乳腺癌的四個類型(訓練集train/feats.csv的最後一列)。

下面是我們的測試集和訓練集:其中images文件裏包含了好多個子文件夾,每個子文件夾裏又分別有好多張病人的乳腺癌超聲波診斷圖像,feats.csv裏存放的是病人的乳腺癌臨牀診斷數據。

訓練集train/feats.csv中的部分臨牀診斷數據:

測試集test/feat.csv 中的部分臨牀診斷數據:

我們現在使用決策樹進行分類預測,這裏的id是病人的id,預測病人得的是那種類型的乳腺癌,最後輸出病人id和對應的乳腺癌種類的csv文件。

#決策樹分類 https://blog.csdn.net/bjjoy2009/article/details/80841657
from sklearn import tree
#import graphviz
import os
import pandas as pd
import csv
import numpy
cancer_train = pd.read_csv('./train/feats.csv')
#print(cancer_train)
#訓練集數據
x_cancer_train = pd.read_csv('./train/feats.csv',usecols = [1,2,3])
#訓練集標籤,即最後一列的數據
y_cancer_train = pd.read_csv('./train/feats.csv',usecols = [4])
#測試集
cancer_test = pd.read_csv('./test/feats.csv')
#print(cancer_test)
x_cancer_test = pd.read_csv('./test/feats.csv',usecols=[1,2,3])
dtc = tree.DecisionTreeClassifier(criterion="entropy")
#訓練
clf = dtc.fit(x_cancer_train,y_cancer_train)
#測試
clf_y_predict = clf.predict(x_cancer_test)
print(clf_y_predict)

 下面是將輸出的乳腺癌預測類別和病人的id好對應輸出成csv文件,文件名爲submission.csv:

list3 = numpy.array(clf_y_predict).reshape(87,1)
#print(numpy.shape(list3)) #(87, 1)

filename = './test/feats.csv'
#讀取數據集中的第一列數據:
list1 = []
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
   # result = list(reader)
    column1 = [row[0] for row in reader]
    list1.append(column1)
print(list1)
#print(numpy.shape(list1))
list2 = numpy.array(list1).reshape(87,1)
print(list2)
print(numpy.shape(list2))
#兩個放在一起(id \ 標籤)
list4 = numpy.hstack((list2, list3))    #np.hstack((a,b))在行上合併
print(list4)                           
print(numpy.shape(list4))
#轉成新的csv表,存放最終的結果:
name = ["id","molecular_subtype"]
csv_list = pd.DataFrame(columns=name, data=list4)
#轉存爲新的csv表
csv_list.to_csv('submission.csv')

其實這個預測病人乳腺癌的類型還需要結合對應圖像的特徵,由於能力有限,所以這裏只實現了使用文本的特徵進行分類預測,但在一定程度也起到了作用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章