2.1監(jiān)督學(xué)習(xí)經(jīng)典模型
監(jiān)督學(xué)習(xí):
2.1.1分類學(xué)習(xí)
二分類:從兩個類別中選擇一個作為預(yù)測結(jié)果悲幅。
多類分類:多于兩個類別中選擇一個套鹅。
多標(biāo)簽分類:一個樣本是否同時屬于多個不同類別站蝠。
2.1.1.1線性分類器(linear classifier)
模型介紹:是一種假設(shè)特征與分類結(jié)果存在線性關(guān)系的模型。這個模型通過累加計算每個維度的特征與各自權(quán)重的乘積來幫助類別決策卓鹿。
我們所要處理的最簡單的二分類問題數(shù)據(jù)f屬于{0,1}菱魔;因此需要一個函數(shù)把原先的f屬于R映射到{0,1}。于是我們想到了邏輯斯蒂函數(shù)吟孙。
我們可以觀察到該模型如何處理一個待分類的特征向量:如果z=0澜倦,那么g=0.5;若z<0則g<0.5杰妓,這個特征向量被判別為一類藻治;反之,若z>0稚失,則g>0.5栋艳,其被歸為另外一類。
數(shù)據(jù)描述
Sample code number:樣本編號
Clump Thickness:細(xì)胞厚度
Uniformity of Cell Size:細(xì)胞大小的均勻度
Uniformity of Cell Shape:細(xì)胞形狀的均勻度
Marginal Adhesion:細(xì)胞邊緣的黏著度
Single Epithelial Cell Size:單一的上皮細(xì)胞的大小
Bare Nuclei:裸露細(xì)胞核
Bland Chromatin:染色質(zhì)
Normal Nucleoli:正常細(xì)胞核
Mitoses:有絲分裂
Class:類型句各。2-良性吸占,4-惡性
數(shù)據(jù):共699條,良性腫瘤458條(65.5%)凿宾,惡性腫瘤241條(34.5%)矾屯,16條缺失值(?標(biāo)出)初厚。
數(shù)據(jù)預(yù)處理
import pandas as pd
import numpy as np
#創(chuàng)建特征列表
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函數(shù)從互聯(lián)網(wǎng)讀取指定函數(shù)
data=pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names=column_names)
#將件蚕?替換為標(biāo)準(zhǔn)缺失值表示
data=data.replace(to_replace='?',value=np.nan)
#丟棄帶有缺失值的數(shù)據(jù)(只要有一個維度有缺失)
data=data.dropna(how='any')
#輸出data的數(shù)據(jù)量和維度
data.shape
(683, 11)
訓(xùn)練、測試數(shù)據(jù)
#使用sklearn.cross_valiation里的train_test_split模塊用于分割數(shù)據(jù)
from sklearn.cross_validation import train_test_split
#隨機(jī)采樣25%的數(shù)據(jù)用于測試产禾,剩下的75%用于構(gòu)建訓(xùn)練集合,設(shè)置 random_state 可以讓每次劃分訓(xùn)練集和驗(yàn)證集的時候都是完全一樣的
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àn)訓(xùn)練樣本的數(shù)量和類別分布
y_train.value_counts()
2 344
4 168
Name: Class, dtype: int64
#查驗(yàn)測試樣本的數(shù)量和類別分布排作,683*0.25=171
y_test.value_counts()
2 100
4 71
Name: Class, dtype: int64
預(yù)測任務(wù)
from sklearn.preprocessing import StandardScaler
#標(biāo)準(zhǔn)化數(shù)據(jù),保證每個維度的特征數(shù)據(jù)方差為1亚情,均值為0.使得預(yù)測結(jié)果不會被某些維度過大的特征值而主導(dǎo)
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)
LogisticRegression預(yù)測任務(wù)
from sklearn.linear_model import LogisticRegression
#初始化LogisticRregression
lr=LogisticRegression()
#調(diào)用LogisticRegression中的fit函數(shù)/模塊用來訓(xùn)練模型參數(shù)
lr.fit(X_train,y_train)
#使用訓(xùn)練好的模型lr對X_test進(jìn)行預(yù)測妄痪,結(jié)果儲存在變量lr_y_predict中。
lr_y_predict=lr.predict(X_test)
SGDClassifier預(yù)測任務(wù)
from sklearn.linear_model import SGDClassifier
#初始化SGDClassifier
sgdc=SGDClassifier()
#調(diào)用SGDClassifier中的fit函數(shù)/模塊用來訓(xùn)練模型參數(shù)
sgdc.fit(X_train,y_train)
#使用訓(xùn)練好的模型lr對X_test進(jìn)行預(yù)測楞件,結(jié)果儲存在變量sgdc_y_predict中衫生。
sgdc_y_predict=sgdc.predict(X_test)
性能測評
定義:
惡性腫瘤為陽性positive
良性腫瘤為陰性negative
真陽性true positive
假陽性false positive
真陰性true negative
假陰性false negative
評價指標(biāo):
精確性悦冀,對于給定的測試數(shù)據(jù)集况既,分類器正確分類的樣本數(shù)與總樣本數(shù)之比。
accuracy = (TP + TN) / (TP + FP + TN + FN)
精確率笑撞,所有"正確被檢索的item(TP)"占所有"實(shí)際被檢索到的(TP+FP)"的比例黄伊。
precision = TP / (TP + FP)
召回率泪酱,所有"正確被檢索的item(TP)"占所有"應(yīng)該檢索到的item(TP+FN)"的比例。
recall = TP / (TP + FN)
F1指標(biāo),精確值和召回率的調(diào)和均值
F1 Score = 2P*R/(P+R)西篓,其中P和R分別為 precision 和 recall
預(yù)測任務(wù)的性能分析
from sklearn.metrics import classification_report
使用邏輯斯蒂回歸模型自帶的評分函數(shù)score獲得模型在測試集上的準(zhǔn)確性結(jié)果
print('Accuracy of LR Classifier:',lr.score(X_test,y_test))
Accuracy of LR Classifier: 0.988304093567
#利用classification_report模塊獲得LogisticRegression其他三個指標(biāo)的結(jié)果
print(classification_report(y_test,lr_y_predict,target_names=['Benign','Malignant']))
#使用隨機(jī)梯度下降模型自帶的評分函數(shù)score獲得模型在測試集上的準(zhǔn)確性結(jié)果
print('Accuracy of LR Classifier:',sgdc.score(X_test,y_test))
Accuracy of LR Classifier: 0.964912280702
#利用classification_report模塊獲得SGDClassifier其他三個指標(biāo)的結(jié)果
print(classification_report(y_test,sgdc_y_predict,target_names=['Benign','Malignant']))
question:最后兩步的結(jié)果每次都不一樣愈腾??岂津?
特點(diǎn)分析
線性分類器可以說是最基本和最常用的機(jī)器學(xué)習(xí)模型虱黄。盡管受限于數(shù)據(jù)特征與分類目標(biāo)之間的線性假設(shè),我們?nèi)匀豢梢栽诳茖W(xué)研究與工程實(shí)踐中把線性分類器的表現(xiàn)性能作為基準(zhǔn)吮成。
LogisticRegression:對參數(shù)的計算采用精確解析的方式橱乱,計算時間長但是模型性能高。
SGDClassifier:采用隨機(jī)梯度上升算法估計模型參數(shù)粱甫,計算時間短但是產(chǎn)出的模型性能低泳叠。適用于對于訓(xùn)練數(shù)據(jù)規(guī)模在10萬量級以上的數(shù)據(jù),考慮到時間的耗用茶宵,筆者更加推薦使用隨機(jī)梯度算法對模型參數(shù)進(jìn)行估計危纫。
參考資料https://wenku.baidu.com/view/fe7e334d482fb4daa58d4b97.html