【Kaggle筆記】良/惡性乳腺腫瘤資料(線性分類)
阿新 • • 發佈:2019-01-04
系統環境
資料集
程式碼
# -*- coding: utf-8 -*-
"""
良/惡性乳腺腫瘤資料線性分類
模型對比:
LogisticRegression (計算時間長,模型效能略高)
SGDClassifier (計算時間段,模型效能略低)
"""
# 匯入pandas與numpy工具包。
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("breast-cancer-wisconsin.txt", names = column_names )
# 將?替換為標準缺失值表示。
data = data.replace(to_replace='?' , value=np.nan)
# 丟棄帶有缺失值的資料(只要有一個維度有缺失)。
data = data.dropna(how='any')
# 輸出data的資料量和維度。
# print(data.shape)
# 使用sklearn.cross_valiation裡的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)
# 從sklearn.preprocessing裡匯入StandardScaler。
from sklearn.preprocessing import StandardScaler
# 從sklearn.linear_model裡匯入LogisticRegression與SGDClassifier。
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
# 標準化資料,保證每個維度的特徵資料方差為1,均值為0。使得預測結果不會被某些維度過大的特徵值而主導。
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)
# 初始化LogisticRegression與SGDClassifier。
lr = LogisticRegression()
sgdc = SGDClassifier()
# 呼叫LogisticRegression中的fit函式/模組用來訓練模型引數。
lr.fit(X_train, y_train)
# 使用訓練好的模型lr對X_test進行預測,結果儲存在變數lr_y_predict中。
lr_y_predict = lr.predict(X_test)
# 呼叫SGDClassifier中的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模組獲得LogisticRegression其他三個指標的結果。
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模組獲得SGDClassifier其他三個指標的結果。
print(classification_report(y_test, sgdc_y_predict, target_names=['Benign', 'Malignant']))
線性分類模型比對結果
- LogisticRegression (計算時間長,模型效能略高)
- SGDClassifier (計算時間段,模型效能略低)