2.1.1.1線性分類器

2.1監督學習經典模型
監督學習:


2.1.1分類學習
二分類:從兩個類別中選擇一個作為預測結果。
多類分類:多于兩個類別中選擇一個。
多標簽分類:一個樣本是否同時屬于多個不同類別。

2.1.1.1線性分類器(linear classifier)
模型介紹:是一種假設特征與分類結果存在線性關系的模型。這個模型通過累加計算每個維度的特征與各自權重的乘積來幫助類別決策。
我們所要處理的最簡單的二分類問題數據f屬于{0,1};因此需要一個函數把原先的f屬于R映射到{0,1}。于是我們想到了邏輯斯蒂函數。



我們可以觀察到該模型如何處理一個待分類的特征向量:如果z=0,那么g=0.5;若z<0則g<0.5,這個特征向量被判別為一類;反之,若z>0,則g>0.5,其被歸為另外一類。

數據描述

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:類型。2-良性,4-惡性

數據:共699條,良性腫瘤458條(65.5%),惡性腫瘤241條(34.5%),16條缺失值(?標出)。

數據預處理
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

(683, 11)


訓練、測試數據
#使用sklearn.cross_valiation里的train_test_split模塊用于分割數據
from sklearn.cross_validation import train_test_split
#隨機采樣25%的數據用于測試,剩下的75%用于構建訓練集合,設置 random_state 可以讓每次劃分訓練集和驗證集的時候都是完全一樣的
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()

2 344
4 168
Name: Class, dtype: int64

#查驗測試樣本的數量和類別分布,683*0.25=171
y_test.value_counts()

2 100
4 71
Name: Class, dtype: int64

預測任務
from sklearn.preprocessing import StandardScaler
#標準化數據,保證每個維度的特征數據方差為1,均值為0.使得預測結果不會被某些維度過大的特征值而主導
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)

LogisticRegression預測任務

from sklearn.linear_model import LogisticRegression
#初始化LogisticRregression
lr=LogisticRegression()
#調用LogisticRegression中的fit函數/模塊用來訓練模型參數
lr.fit(X_train,y_train)
#使用訓練好的模型lr對X_test進行預測,結果儲存在變量lr_y_predict中。
lr_y_predict=lr.predict(X_test)

SGDClassifier預測任務

from sklearn.linear_model import SGDClassifier
#初始化SGDClassifier
sgdc=SGDClassifier()
#調用SGDClassifier中的fit函數/模塊用來訓練模型參數
sgdc.fit(X_train,y_train)
#使用訓練好的模型lr對X_test進行預測,結果儲存在變量sgdc_y_predict中。
sgdc_y_predict=sgdc.predict(X_test)
性能測評

定義:
惡性腫瘤為陽性positive
良性腫瘤為陰性negative
真陽性true positive
假陽性false positive
真陰性true negative
假陰性false negative

評價指標:
精確性,對于給定的測試數據集,分類器正確分類的樣本數與總樣本數之比。
accuracy = (TP + TN) / (TP + FP + TN + FN)
精確率,所有"正確被檢索的item(TP)"占所有"實際被檢索到的(TP+FP)"的比例。
precision = TP / (TP + FP)
召回率,所有"正確被檢索的item(TP)"占所有"應該檢索到的item(TP+FN)"的比例。
recall = TP / (TP + FN)
F1指標,精確值和召回率的調和均值
F1 Score = 2P*R/(P+R),其中P和R分別為 precision 和 recall

預測任務的性能分析
from sklearn.metrics import classification_report
使用邏輯斯蒂回歸模型自帶的評分函數score獲得模型在測試集上的準確性結果
print('Accuracy of LR Classifier:',lr.score(X_test,y_test))

Accuracy of LR Classifier: 0.988304093567

#利用classification_report模塊獲得LogisticRegression其他三個指標的結果
print(classification_report(y_test,lr_y_predict,target_names=['Benign','Malignant']))
#使用隨機梯度下降模型自帶的評分函數score獲得模型在測試集上的準確性結果
print('Accuracy of LR Classifier:',sgdc.score(X_test,y_test))

Accuracy of LR Classifier: 0.964912280702

#利用classification_report模塊獲得SGDClassifier其他三個指標的結果
print(classification_report(y_test,sgdc_y_predict,target_names=['Benign','Malignant']))

question:最后兩步的結果每次都不一樣???

特點分析

線性分類器可以說是最基本和最常用的機器學習模型。盡管受限于數據特征與分類目標之間的線性假設,我們仍然可以在科學研究與工程實踐中把線性分類器的表現性能作為基準。
LogisticRegression:對參數的計算采用精確解析的方式,計算時間長但是模型性能高。
SGDClassifier:采用隨機梯度上升算法估計模型參數,計算時間短但是產出的模型性能低。適用于對于訓練數據規模在10萬量級以上的數據,考慮到時間的耗用,筆者更加推薦使用隨機梯度算法對模型參數進行估計。

參考資料https://wenku.baidu.com/view/fe7e334d482fb4daa58d4b97.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容