本文為《Python機(jī)器學(xué)習(xí)及實(shí)踐:從零通往Kaggle競(jìng)賽之路》一書(shū)學(xué)習(xí)筆記,歡迎與我交流數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)相關(guān)話題。
本文與前文利用sklearn進(jìn)行分類:良/惡性乳腺癌腫瘤預(yù)測(cè)(一)的區(qū)別在于數(shù)據(jù)集的特征更加豐富,一共有8個(gè)特征,類別還是兩類:良性/惡性(在此數(shù)據(jù)集中分別記為2和4)。
1.數(shù)據(jù)預(yù)處理
該數(shù)據(jù)集有部分缺失數(shù)據(jù)被記為''?'',訓(xùn)練之前先去除含缺失值的樣本
# 創(chuàng)建特征列表
data.replace(to_replace='?',value=np.nan,inplace=True) #將?替換為標(biāo)準(zhǔn)缺失值
data.dropna(how='any',inplace=True) #只要有一個(gè)維度數(shù)據(jù)有缺失則丟棄數(shù)據(jù)
使用sklearn自帶的預(yù)處理庫(kù)將數(shù)據(jù)集按3:1劃分訓(xùn)練集和測(cè)試集
from sklearn.cross_validation import train_test_split #按3:1劃分訓(xùn)練集與測(cè)試集
X_train,X_test,y_train,y_test = train_test_split(data[column_names[1:10]],data[column_names[10]],test_size=0.25)
#第1列為編號(hào) 2-9列為特征 第10列為類別(一共2類:2,4)
由于不同特征之間數(shù)值差距較大,為保證預(yù)測(cè)結(jié)果不會(huì)被某些維度過(guò)大的特征而主導(dǎo),先標(biāo)準(zhǔn)化數(shù)據(jù)集
from sklearn.preprocessing import StandardScaler #將數(shù)據(jù)標(biāo)準(zhǔn)化為正態(tài)分布
#標(biāo)準(zhǔn)化特征
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.fit_transform(X_test)
2.訓(xùn)練模型
我們假設(shè)數(shù)據(jù)特征和分類目標(biāo)之間存在線性關(guān)系,這里使用2種線性分類器LogisticRegression與SGDClassifier分別訓(xùn)練并作比較。
LogisiticRegression:采用常規(guī)精確計(jì)算的方式計(jì)算參數(shù),計(jì)算時(shí)間長(zhǎng)模型性能略高
SGDclassifier: 采用梯度法迭代漸進(jìn)估計(jì)參數(shù),計(jì)算時(shí)間短模型性能略低
#創(chuàng)建模型并訓(xùn)練、預(yù)測(cè)
lr = LogisticRegression()
sgd = SGDClassifier()
lr.fit(X_train,y_train)
lr_y_predict = lr.predict(X_test) #lr分類結(jié)果
sgd.fit(X_train,y_train)
sgd_y_predict = lr.predict(X_test) #sgd分類結(jié)果
3.評(píng)價(jià)訓(xùn)練結(jié)果

可以看到,LogisiticRegression效果略好,但大數(shù)據(jù)集下為了追求訓(xùn)練速度,一般采用梯度法進(jìn)行線性分類。
from sklearn.metrics import classification_report
print 'Accuracy of LR Classifier:',lr.score(X_test,y_test)
print classification_report(y_test,lr_y_predict)
print 'Accuracy of SGD Classifier:',sgd.score(X_test,y_test)
print classification_report(y_test,sgd_y_predict)
評(píng)價(jià)指標(biāo)有score(即Accuracy)正確率、Precision精確率、Recall召回率、F1指數(shù)
以下記正樣本為positive ,負(fù)樣本為negative
常見(jiàn)的評(píng)價(jià)指標(biāo)
F1計(jì)算方式
由計(jì)算公式可知,Accuracy即分類正確的個(gè)數(shù)與樣本總數(shù)的比值,Precision為正樣本個(gè)正確分類的個(gè)數(shù)與正樣本總數(shù)的比值,Recall為分類正確的負(fù)樣本個(gè)數(shù)與分類正確的正樣本個(gè)數(shù)+分類錯(cuò)誤的負(fù)樣本個(gè)數(shù)的比值,而F1則衡量了Precision與Recall的距離,越接近,F1值越高。
對(duì)于腫瘤分類的實(shí)際問(wèn)題,顯然False negative的結(jié)果最不能接收,即負(fù)樣本(惡性)沒(méi)有被正確識(shí)別。
附一張更清晰的圖


