機器學習之良/惡性乳腺癌腫瘤預測

知識點:

  邏輯斯蒂迴歸分類器python

  訓練數據集:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data算法

數據預處理

打開ipython網頁解釋器網絡

#導入模塊
import pandas as pd
import numpy as np
#建立特徵列表表頭
column_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']
#使用pandas.read_csv函數從網上讀取數據集
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names=column_names)
#將?替換爲標準缺失值表示
data = data.replace(to_replace='?',value = np.nan)
#丟棄帶有缺失值的數據(只要有一個維度有缺失便丟棄)
data = data.dropna(how='any')
#查看data的數據量和維度
data.shape  

維度打印信息爲:dom

 

  有683條數據,維度爲11機器學習

若是用mac環境,在讀取網絡上數據集時候可能會報錯,解決方案,打開Finder,找到python解釋器,點擊安裝便可函數

 

  處理後數據集以下:性能

   因爲原始數據沒有提供對應的測試樣本用於評估模型性能,這裏對帶標記的數據進行分割,25%做爲測試集,其他做爲訓練集學習

#使用sklearn.cross_validation裏的train_test_split模塊分割數據集
from sklearn.cross_validation import train_test_split
#隨機採樣25%的數據用於測試,剩下的75%用於構建訓練集
X_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)
#查看訓練樣本的數量和類別分佈
y_train.value_counts()

#查看測試樣本的數量和類別分佈
y_test.value_counts()

  

 

創建模型,預測數據

#從sklearn.preprocessing導入StandardScaler
from sklearn.preprocessing import StandardScaler
#從sklearn.linear_model導入LogisticRegression(邏輯斯蒂迴歸)
from sklearn.linear_model import LogisticRegression
#從sklearn.linear_model導入SGDClassifier(隨機梯度參數)
from sklearn.linear_model import SGDClassifier

#標準化數據,保證每一個維度的特徵數據方差爲1,均值爲,使得預測結果不會被某些過大的特徵值而主導(在機器學習訓練以前, 先對數據預先處理一下, 取值跨度大的特徵數據,
咱們濃縮一下, 跨度小的括展一下, 使得他們的跨度儘可能統一.) ss = StandardScaler() X_train = ss.fit_transform(X_train) X_test = ss.transform(X_test)

#初始化兩種模型 lr = LogisticRegression() sgdc = SGDClassifier()

#調用邏輯斯蒂迴歸,使用fit函數訓練模型參數 lr.fit(X_train,y_train)
#使用訓練好的模型lr對x_test進行預測,結果儲存在變量lr_y_predict中 lr_y_predict = lr.predict(X_test)

#調用隨機梯度的fit函數訓練模型 sgdc.fit(X_train,y_train)
#使用訓練好的模型sgdc對X_test進行預測,結果儲存在變量sgdc_y_predict中 sgdc_y_predict = sgdc.predict(X_test)

  下面查看兩種模型的預測結果測試

  使用線性分類模型從事良/惡性腫瘤預測任務的性能分析

#從sklearn.metrics導入classification_report
from sklearn.metrics import classification_report

#使用邏輯斯蒂迴歸模型自帶的評分函數score得到模型在測試集上的準確性結果
print('Accuracy of LR Classifier:',lr.score(X_test,y_test))
#使用classification_report模塊得到邏輯斯蒂模型其餘三個指標的結果(召回率,精確率,調和平均數)
print(classification_report(y_test,lr_y_predict,target_names=['Benign','Malignant']))

  

#使用隨機梯度降低模型自帶的評分函數score得到模型在測試集上的準確性結果
print('Accuarcy of SGD Classifier:',sgdc.score(X_test,y_test))
##使用classification_report模塊得到隨機梯度降低模型其餘三個指標的結果
print(classification_report(y_test,sgdc_y_predict,target_names=['Benign','Malignant']))

 

   結論:經過比較,邏輯斯蒂模型比隨機梯度降低模型在測試集上表現有更高的準確性,由於邏輯斯蒂採用解析的方式精確計算模型參數,而隨機梯度降低採用估計值3d

  特色分析:邏輯斯蒂對參數的計算採用精確解析的方法,計算時間長可是模型性能高,隨機梯度降低採用隨機梯度上升算法估計模型參數,計算時間短但產出的模型性能略低,通常而言,對於訓練數據規模在10萬量級以上的數據,考慮到時間的耗用,推薦使用隨機梯度算法

相關文章
相關標籤/搜索