1. 程式人生 > >【機器學習 sklearn】邏輯斯蒂迴歸模型--Logistics regression

【機器學習 sklearn】邏輯斯蒂迴歸模型--Logistics regression

執行結果:

"D:\Program Files\Python27\python.exe" D:/PycharmProjects/sklearn/Logistics_regression.py
Logistics regression
[[99  1]
 [ 1 70]]
sgdc_y_predict
[[98  2]
 [ 1 70]]
Accuracy of LR Classifier: 0.988304093567
             precision    recall  f1-score   support

     Benign       0.99      0.99      0.99
100 Malignant 0.99 0.99 0.99 71 avg / total 0.99 0.99 0.99 171 Accuarcy of SGD Classifier: 0.982456140351 precision recall f1-score support Benign 0.99 0.98 0.98 100 Malignant 0.97 0.99 0.98 71
avg / total 0.98 0.98 0.98 171 Process finished with exit code 0

原始碼:

#coding:utf-8
from __future__ import division
import sys
reload(sys)
sys.setdefaultencoding('utf-8')


##############邏輯斯蒂迴歸模型Logostics regression#####################
# 匯入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('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data', names = column_names ) # print data # 將?替換為標準缺失值表示。 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(已移除) from sklearn.model_selection 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) # 查驗訓練樣本的數量和類別分佈。 # print y_train.value_counts() # 查驗測試樣本的數量和類別分佈。 # print y_test.value_counts() # 從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) # print lr_y_predict # 呼叫SGDClassifier中的fit函式/模組用來訓練模型引數。 sgdc.fit(X_train, y_train) # 使用訓練好的模型sgdc對X_test進行預測,結果儲存在變數sgdc_y_predict中。 sgdc_y_predict = sgdc.predict(X_test) # print sgdc_y_predict ############列印混淆矩陣 from sklearn.metrics import confusion_matrix labels1 = list(set(lr_y_predict)) conf_mat1 = confusion_matrix(y_test, lr_y_predict, labels=labels1) print "Logistics regression" print conf_mat1 labels2 = list(set(sgdc_y_predict)) conf_mat2 = confusion_matrix(y_test, sgdc_y_predict, labels=labels2) print "sgdc_y_predict" print conf_mat2 # 從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'])