醫院有78條乳腺癌病人的數據,這些病人經過治療,其中34位5年內病情復發,另外44位5年內未見復發,現需要對19位經過治療的病人,分析其在5年內是否會復發,並評估模型的準確性及可行性。
數據說明訓練數據包含78位乳腺癌病人樣本,他們中的34位5年內病情復發(標記為relapse),另外的44位至少在5年內未復發(標記為non-relapse)。相應地,這裡有12位復發,7位未復發的病人樣本在測試集中。使用到的基因數量為24481。
LDA降維由於維度太多,直接參與計算,太耗費性能,並且時間較長。為便於處理,這裡使用線性判別分析方法對數據降維處理。根據經驗,我們將特徵維度降到156維(即維度數量的平方根), 代碼如下:
import pandas as pdtrain_data = pd.read_csv("breastCancer_train.data",header=None)test_data = pd.read_csv("breastCancer_test.data",header=None)train_data.head()from sklearn.discriminant_analysis import LinearDiscriminantAnalysisX_train = train_data.drop(24481,axis=1,inplace=False)X_test = test_data.drop(24481,axis=1,inplace=False)y_train = train_data[24481]y_test = test_data[24481]lda = LinearDiscriminantAnalysis(n_components=156)lda.fit(X_train, y_train)x_train_trans = lda.transform(X_train)x_test_trans = lda.transform(X_test)x_train_trans
array([[-0.56797136], [-3.90700734], [ 0.28597055], [ 2.68592054],.由於數據存在嚴重的共線性,最終的降維結果只有一維。不過,我們仍然可以基於這個數據建立分類模型。
import numpy as npfrom sklearn import treefrom sklearn.metrics import confusion_matrixclf = tree.DecisionTreeClassifier(max_leaf_nodes=2,min_samples_leaf=15)clf = clf.fit(x_train_trans, y_train)y_test_pred = clf.predict(x_test_trans)C2= confusion_matrix(y_test, y_test_pred)print(C2)# [[5 2]# [3 9]]np.diag(C2).sum()/np.sum(C2)# 0.7368421052631579進一步,可將決策樹繪製出來,代碼如下:
import graphviz,pydotplusfrom IPython.display import Image dot_data = tree.export_graphviz(clf, out_file=None, feature_names=['v'], class_names=['relapse','non-relapse'], filled=True, rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data) Image(graph.create_png())決策樹除了LDA降維處理的方法之外,我們還可以直接基於高維數據建模,過程如下:
import numpy as npfrom sklearn import treefrom sklearn.metrics import confusion_matrixclf = tree.DecisionTreeClassifier(max_leaf_nodes=2,min_samples_leaf=15)clf = clf.fit(X_train, y_train)y_test_pred = clf.predict(X_test)C2= confusion_matrix(y_test, y_test_pred)print(C2)# [[3 4]# [5 7]]np.diag(C2).sum()/np.sum(C2)# 0.5263157894736842當然,這個不是最好的,只是在相同的設置下,和LDA降維後的決策樹效果進行比較。我們可以把決策樹繪製出來,代碼如下:
import graphviz,pydotplusfrom IPython.display import Image dot_data = tree.export_graphviz(clf, out_file=None, feature_names=X_train.columns, class_names=['relapse','non-relapse'], filled=True, rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data) Image(graph.create_png())代碼及數據領取方式
掃描下方公眾號回覆:0718
可獲取下載連結
歡迎關注,數海星辰,作者官方公眾號
往期回顧: