scikit-learn系列之分類算法篩查

算法篩查

算法篩查(spot checking)用來(lái)發(fā)現(xiàn)可以很好解決機(jī)器學(xué)習(xí)問(wèn)題的算法。在著手做之前,你永遠(yuǎn)也不知道哪種算法最契合你的數(shù)據(jù)。因此你必須嘗試大量的算法,找出一個(gè)最有潛力的算法,繼續(xù)深入挖掘。本文中會(huì)展示六種適用于分類問(wèn)題的算法,我們可以使用scikit-learn進(jìn)行算法篩查。

算法篩查

在為你的機(jī)器學(xué)習(xí)問(wèn)題選擇算法時(shí),問(wèn)題不是:我應(yīng)該使用哪種算法?而是:哪些算法可以用于我的算法篩查?你可以推測(cè)哪些算法可能適合你的數(shù)據(jù)集,這是一個(gè)好的開始。我推薦嘗試混合一些算法,看看哪一個(gè)可以最好的反映出你的數(shù)據(jù)結(jié)構(gòu)。

  1. 嘗試混合具有不同表征的算法 (instances and trees)。
  2. 嘗試混合不同的學(xué)習(xí)算法 (different algorithms for learning the same type of representation)。
  3. 嘗試混合不同的建模類型的算法 (linear and nonlinear functions or parametric and nonparametric)。

我們將了解6個(gè)分類算法,可以用于算法篩查。
兩個(gè)線性機(jī)器學(xué)習(xí)算法:

  1. Logistic Regression
  2. Linear Discriminant Analysis

四個(gè)非線性的機(jī)器學(xué)習(xí)算:

  1. K-Nearest Neighbors
  2. Naive Bayes
  3. Classification and Regression Trees
  4. Support Vector Machines

使用Pima Indians onset of Diabetes 數(shù)據(jù)集。變量為數(shù)值型,是一個(gè)關(guān)于二分分類問(wèn)題的數(shù)據(jù)。統(tǒng)一使用10-fold的交叉驗(yàn)證來(lái)展示如何進(jìn)行算法篩選,使用平均的準(zhǔn)確率來(lái)代表算法的表現(xiàn)。

6種算法

  1. 邏輯回歸假設(shè)數(shù)值型輸入,數(shù)值符合高斯分布,用于二分的分類問(wèn)題。使用LogisticRegression類構(gòu)建模型。
  2. 線性判別分析用于二分或者多分的分類問(wèn)題。同樣假設(shè)數(shù)值符合高斯分布。使用LinearDiscriminantAnalysis類構(gòu)建模型。
  3. K近鄰使用距離的方法為新數(shù)據(jù)找到K個(gè)相似的實(shí)例,把鄰居的平均作為預(yù)測(cè)結(jié)果。使用KNeighborsClassifier類構(gòu)建模型。
  4. 樸素貝葉斯算法計(jì)算每個(gè)類別的概率和已知輸入值的每個(gè)類別的條件概率。新的數(shù)據(jù)計(jì)算以上概率,假設(shè)它們彼此獨(dú)立的情況下,做乘法。使用GaussianNB類構(gòu)建模型。
  5. 分類和回歸數(shù)(CART or just decision trees) 使用訓(xùn)練數(shù)據(jù)構(gòu)建二分樹。通過(guò)評(píng)價(jià)數(shù)據(jù)變量最小化cost函數(shù)來(lái)獲得分割點(diǎn)。使用DecisionTreeClassifier類構(gòu)建模型。
  6. 支持向量機(jī)找到一條線可以分離兩類。與分割線最近的數(shù)據(jù)實(shí)例叫做支持向量,這些支持向量對(duì)分離線有決定性影響。該算法的一個(gè)要點(diǎn)是使用不同的核函數(shù)來(lái)建立模型。Radial Basis Function是默認(rèn)的核函數(shù)。使用SVC類構(gòu)建模型。

代碼如下(在原代碼的基礎(chǔ)上做了一個(gè)循環(huán)):

# Logistic Regression Classification
import pandas
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
seed = 7
kfold = model_selection.KFold(n_splits=10, random_state=seed)
def build_model(model_name):
    model = model_name()
    return model
for model_name in [LogisticRegression,LinearDiscriminantAnalysis,KNeighborsClassifier,GaussianNB,DecisionTreeClassifier,SVC]:
    model = build_model(model_name)
    results = model_selection.cross_val_score(model, X, Y, cv=kfold)
    print("%s mean accuracy:%s")%(model_name,results.mean())

結(jié)果如下:

<class 'sklearn.linear_model.logistic.LogisticRegression'> mean accuracy:0.76951469583
<class 'sklearn.discriminant_analysis.LinearDiscriminantAnalysis'> mean accuracy:0.773462064252
<class 'sklearn.neighbors.classification.KNeighborsClassifier'> mean accuracy:0.726555023923
<class 'sklearn.naive_bayes.GaussianNB'> mean accuracy:0.75517771702
<class 'sklearn.tree.tree.DecisionTreeClassifier'> mean accuracy:0.696548188653
<class 'sklearn.svm.classes.SVC'> mean accuracy:0.651025290499

主要知識(shí)點(diǎn)

  • model_selection.KFold
  • model_selection.cross_val_score
  • results.mean
  • linear_model.LogisticRegression
  • discriminat_analysis.LinearDiscriminantAnalysis
  • neighbors.KNeighborsClassifier
  • naive_bayes.GaussianNB
  • tree.DecisionTreeClassifier
  • svm.SVC

原文鏈接:Spot-Check Classification Machine Learning Algorithms in Python with scikit-learn

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

推薦閱讀更多精彩內(nèi)容