Python數據分析及可視化實例之疾病預測(分類)
系列文章總目錄:Python數據分析及可視化實例目錄
Talk is cheap , show U the code.
該源碼注釋比較全面,需要對SKlearn有一定的了解,
當然,你也可以把它視作黑箱,做個調包俠也是大俠,
沒錯,本主用Bokeh進行可視化:
# coding: utf-8nn# In[1]:nn# 導入pandas與numpy工具包。nimport pandas as pdnimport numpy as npn# 創建特徵列表。n# column_names = [樣本編號, 腫塊厚度, 細胞大小均一性, 細胞形態均一性, 邊際黏連, 單個細胞到校, 裸核, 染色體, 正常核, 有絲分裂, 分類]ncolumn_names = [Sample code number, Clump Thickness, Uniformity of Cell Size, Uniformity of Cell Shape, Marginal Adhesion, Single Epithelial Cell Size, Bare Nuclei, Bland Chromatin, Normal Nucleoli, Mitoses, Class]n# 使用pandas.read_csv函數從互聯網讀取指定數據。ndata = pd.read_csv(https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data, names = column_names )n# 將?替換為標準缺失值表示。ndata = data.replace(to_replace=?, value=np.nan)n# 丟棄帶有缺失值的數據(只要有一個維度有缺失)。ndata = data.dropna(how=any)n# 輸出data的數據量和維度。ndata.shapennn# In[2]:nnfrom bokeh.charts import Scatter, show, output_notebook # 採用chart的高級繪圖noutput_notebook()nnn# In[3]:nnscatter = Scatter(n data, x=Clump Thickness, y=Uniformity of Cell Size, n xlabel=厚度, ylabel=大小, title="腫瘤性質與厚度、大小關係",legend=top_left,n color=Class, outline_line_alpha = 0.02, border_fill_alpha=0.02, plot_height=500, plot_width_=500)n# 直接通過class分類(聚類)定義不同散點的colornshow(scatter)nnn# In[4]:nn# 使用sklearn.cross_valiation里的train_test_split模塊用於分割數據。n# from sklearn.cross_validation import train_test_splitnfrom sklearn.model_selection import train_test_splitn# 隨機採樣25%的數據用於測試,剩下的75%用於構建訓練集合。nX_train, X_test, y_train, y_test = train_test_split(data[column_names[1:10]], data[column_names[10]], test_size=0.25, random_state=33)nnn# In[5]:nn# 查驗訓練樣本的數量和類別分布。ny_train.value_counts()nnn# In[6]:nn# 查驗測試樣本的數量和類別分布。ny_test.value_counts()nnn# In[7]:nn# 從sklearn.preprocessing里導入StandardScaler。nfrom sklearn.preprocessing import StandardScalern# 從sklearn.linear_model里導入LogisticRegression與SGDClassifier。nfrom sklearn.linear_model import LogisticRegression # 邏輯回歸nfrom sklearn.linear_model import SGDClassifier # 隨機參數估計n# 標準化數據,保證每個維度的特徵數據方差為1,均值為0。使得預測結果不會被某些維度過大的特徵值而主導。nss = StandardScaler()nX_train = ss.fit_transform(X_train)nX_test = ss.transform(X_test)nnn# In[8]:nn# 初始化LogisticRegression與SGDClassifier。nlr = LogisticRegression()nsgdc = SGDClassifier()n# 調用LogisticRegression中的fit函數/模塊用來訓練模型參數。nlr.fit(X_train, y_train)n# 使用訓練好的模型lr對X_test進行預測,結果儲存在變數lr_y_predict中。nlr_y_predict = lr.predict(X_test)nn# 調用SGDClassifier中的fit函數/模塊用來訓練模型參數。nsgdc.fit(X_train, y_train)n# 使用訓練好的模型sgdc對X_test進行預測,結果儲存在變數sgdc_y_predict中。nsgdc_y_predict = sgdc.predict(X_test)nnn# In[9]:nn# 從sklearn.metrics里導入classification_report模塊。nfrom sklearn.metrics import classification_reportn# 使用邏輯斯蒂回歸模型自帶的評分函數score獲得模型在測試集上的準確性結果。nprint (Accuracy of LR Classifier:, lr.score(X_test, y_test))nprint (Accuracy of LR Classifier:, lr.score(X_test, y_test))n# 利用classification_report模塊獲得LogisticRegression其他三個指標的結果。nprint (classification_report(y_test, lr_y_predict, target_names=[Benign, Malignant]))nnn# In[10]:nn# 使用隨機梯度下降模型自帶的評分函數score獲得模型在測試集上的準確性結果。nprint(Accuarcy of SGD Classifier:, sgdc.score(X_test, y_test))n# 利用classification_report模塊獲得SGDClassifier其他三個指標的結果。nprint(classification_report(y_test, sgdc_y_predict, target_names=[Benign, Malignant])) nnn# #### 交叉驗證線性回歸分類器的準確率nn# In[11]:nnfrom sklearn import cross_validationnfrom sklearn.cross_validation import KFoldnnn# In[12]:nnalg = LogisticRegression(random_state=1)nscores = cross_validation.cross_val_score(alg, X_train, y_train, cv=3)nprint(scores.mean()) # 分類器的準確率n
新手可查閱歷史目錄:
Python數據分析及可視化實例目錄
也可以到該處報到,邀請您哦,進群請說明來自知乎yeayee專欄。
Scikit-learn(sklearn) 0.19 中文文檔校驗邀請函
推薦閱讀:
※從一次CycleGAN實現聊聊TF
※Python 參數傳引用還是傳值?
※Python中對位元組流/二進位流的操作:struct模塊簡易使用教程
※pandas複習總結(二)