邏輯斯蒂迴歸分類器python
打開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萬量級以上的數據,考慮到時間的耗用,推薦使用隨機梯度算法