小強(qiáng)學(xué)AI之 - 3支持向量機(jī)(support vector machines SVMs)

前記

上一篇中搜贤,我們了解了樸素貝葉斯。現(xiàn)在知道了调衰,樸素貝葉斯是監(jiān)督學(xué)習(xí)的一種算法膊爪。
樸素貝葉斯特殊的一點(diǎn)在于,這種算法非常適合文本分類嚎莉。在處理文本時(shí)米酬,常見(jiàn)的做法是將每個(gè)單詞看作一個(gè)特征,這樣就會(huì)有大量的特征趋箩。樸素貝葉斯假設(shè)各個(gè)特征之間獨(dú)立的赃额,并且算法又相對(duì)簡(jiǎn)單,使得它在文本分類應(yīng)用中發(fā)揮作用叫确。

支持向量機(jī)SVMs(support vector machines)

另一種監(jiān)督分類算法支持向量機(jī)SVMs(support vector machines)跳芳。

SVMs出現(xiàn)的時(shí)間不久,由Vadimir Vaplik(俄羅斯人)提出竹勉。
假設(shè)我們有一些兩種不同類型的數(shù)據(jù)飞盆。支持向量機(jī)就是在兩類數(shù)據(jù)之間尋找分隔線(通常稱之為超平面)的一種算法。

概念
margin - maximizes distance to nearest point
區(qū)分兩個(gè)類的分隔線與兩個(gè)類的最近點(diǎn)的距離次乓。最大化這個(gè)距離吓歇,就可以提高分類的穩(wěn)健性。

SVM的內(nèi)部原理也是最大限度的提升結(jié)果的穩(wěn)健性票腰。
SVM總是首先考慮分類正確性城看,然后才考慮對(duì)間隔最大化。

異常值響應(yīng)
對(duì)于異常值杏慰,SVM原則是盡量找到?jīng)Q策面测柠,并允許單個(gè)異常值在決策面的另一側(cè)。
實(shí)際上 SVM對(duì)于異常值非常健壯缘滥。在某種程度上在找出最大間隔和忽略異常值之間做了均衡 轰胁。
我們也可以通過(guò)修改SVM的參數(shù),決定了它如何檢測(cè)新的異常值朝扼。

用法
同貝葉斯差不多.

  1. 導(dǎo)入
    from sklearn import SVM
  2. 創(chuàng)建分類器
    svm.SVC()
  3. 訓(xùn)練(擬合)
    fit
  4. 分類
    predict

函數(shù)原型:

class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None, random_state=None)[source]

各參數(shù)解釋如下:

1. 核函數(shù)

SVM可以生成非常復(fù)雜的決策邊界软吐。
SVM是基于線性分隔的分類器,但由于SVM會(huì)創(chuàng)建新特征吟税,使得SVM可以學(xué)習(xí)非線性決策面凹耙。
這些新特性就是借助創(chuàng)建SVM時(shí)傳入的參數(shù)kernel來(lái)決定的姿现。

定義

可以將低維度的輸出空間(特征空間)映射到高維度空間的函數(shù)。我們稱之為核函數(shù)肖抱。
通過(guò)使用這種映射备典,使得原來(lái)不可線性分離的內(nèi)容變?yōu)榭煞蛛x。
SVM將這些分類分離后意述,獲取解并返回到原始空間提佣。這樣就得到了一個(gè)非線性分隔。
這是SVM非常重要的優(yōu)點(diǎn)荤崇。通過(guò)在更高維度的空間使用SVM拌屏,可以很容易的找出最佳的線性分類器∈趸纾或決策面倚喂。
在所有機(jī)器學(xué)習(xí)中,SVM是最主要的技巧之一瓣戚。

參數(shù)kernel可選擇如下幾種:



當(dāng)然端圈,也可以自己定義。

C

C值越大子库,可以獲得更多的訓(xùn)練點(diǎn)舱权。也可以說(shuō),C越大仑嗅,可以獲得更復(fù)雜的決策邊界宴倍。
到底是想要一條直線的決策邊界,還是想要一條彎曲的邊界以提高分類準(zhǔn)確度仓技,這就是機(jī)器學(xué)習(xí)中的藝術(shù)性所在(人們口中常說(shuō)的調(diào)參狗鸵贬?)。

咖瑪

咖瑪值有什么作用浑彰?我在linear方法下恭理,測(cè)試了一些值(1.0, 100.0, 1000,0)沒(méi)有發(fā)現(xiàn)明顯區(qū)別拯辙。問(wèn)題先保留郭变。如果有消息再回來(lái)補(bǔ)充。

過(guò)擬合fitting

如果參數(shù)不合適涯保,會(huì)導(dǎo)致本應(yīng)很簡(jiǎn)單的決策面變得復(fù)雜。所以要避免過(guò)度擬合。
避免的方法就是指定SVM的參數(shù)谷饿,也就是調(diào)參(這就是很多人說(shuō)的荧降,機(jī)器學(xué)習(xí)的初級(jí)階段就是調(diào)參)以防止過(guò)度擬合。

當(dāng)然及志,也有自動(dòng)檢測(cè)的方法片排,后面會(huì)學(xué)到寨腔。

優(yōu)缺點(diǎn)

SVM在復(fù)雜的但具有明顯分隔邊界的情況下,表現(xiàn)十分出色率寡。
但在海量數(shù)據(jù)集中表現(xiàn)不太好迫卢。
因?yàn)楫?dāng)訓(xùn)練集變大時(shí),訓(xùn)練時(shí)間是通常會(huì)成倍增長(zhǎng)冶共。
另外乾蛤,噪音過(guò)多的情況下此方法效果也不好。所以如果要分類的類別之間重疊較為嚴(yán)重捅僵,那就需要找一些獨(dú)立的特征家卖,這時(shí)使用貝葉斯分類器會(huì)更有效。

總結(jié)

樸素貝葉斯速度通常比SVM速度快庙楚。適合文本等海量數(shù)據(jù)集上荡。
但SVM在很多方面也很優(yōu)秀,通常準(zhǔn)確率也比貝葉斯高醋奠。
所以榛臼,選擇合適的算法很重要。另外窜司,根據(jù)選擇的算法不同沛善,還需要考慮相應(yīng)的參數(shù)調(diào)整以及過(guò)擬合的可能性(特別是在你沒(méi)有大量訓(xùn)練數(shù)據(jù)的情況下)。

調(diào)整參數(shù)的工作量很大塞祈,后面會(huì)介紹 GridCV(一種幾乎能自動(dòng)查找最優(yōu)參數(shù)調(diào)整的優(yōu)秀 sklearn 工具)金刁。

調(diào)參!調(diào)參议薪!調(diào)參尤蛮!
我的電腦i5-4460 CPU @ 3.20GHz,訓(xùn)練安然郵件數(shù)據(jù)集7000多斯议,要100秒产捞,如果要手工調(diào)參的話,有點(diǎn)太耗時(shí)了哼御。有沒(méi)有更好的辦法坯临??恋昼?換電腦看靠?
望有經(jīng)驗(yàn)的同學(xué)指點(diǎn)一下。謝謝了液肌。

代碼片段

### features_train and features_test are the features for the training
### and testing datasets, respectively
### labels_train and labels_test are the corresponding item labels
features_train, features_test, labels_train, labels_test = preprocess()


#########################################################
### your code goes here ###
#features_train = features_train[:len(features_train)/100] 
#labels_train = labels_train[:len(labels_train)/100] 

print("features lenghth:",len(features_test))

from sklearn.svm import SVC

clf=SVC(kernel="rbf", C=10000.0)

t0 = time()
clf.fit(features_train, labels_train)
print "training time:", round(time()-t0, 3), "s"

t0 = time()
pred=clf.predict(features_test)
print "predict time:", round(time()-t0, 3), "s"

from sklearn.metrics import accuracy_score
print(accuracy_score(pred, labels_test))
i=0
for label in pred:
    if label == 1:
        i = i+1
print("total chris:", i)

#########################################################

參考:
Support Vector Machines-kernel functions
sklearn.svm.SVC
機(jī)器學(xué)習(xí)入門 - Udacity

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挟炬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谤祖,老刑警劉巖婿滓,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粥喜,居然都是意外死亡空幻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門容客,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)秕铛,“玉大人,你說(shuō)我怎么就攤上這事缩挑〉剑” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵供置,是天一觀的道長(zhǎng)谨湘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)芥丧,這世上最難降的妖魔是什么紧阔? 我笑而不...
    開(kāi)封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮续担,結(jié)果婚禮上擅耽,老公的妹妹穿的比我還像新娘。我一直安慰自己物遇,他們只是感情好乖仇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著询兴,像睡著了一般乃沙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诗舰,一...
    開(kāi)封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天警儒,我揣著相機(jī)與錄音,去河邊找鬼眶根。 笑死蜀铲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汛闸。 我是一名探鬼主播蝙茶,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼艺骂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诸老!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤别伏,失蹤者是張志新(化名)和其女友劉穎蹄衷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厘肮,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愧口,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了类茂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耍属。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖巩检,靈堂內(nèi)的尸體忽然破棺而出厚骗,到底是詐尸還是另有隱情,我是刑警寧澤兢哭,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布领舰,位于F島的核電站,受9級(jí)特大地震影響迟螺,放射性物質(zhì)發(fā)生泄漏冲秽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一矩父、第九天 我趴在偏房一處隱蔽的房頂上張望锉桑。 院中可真熱鬧,春花似錦窍株、人聲如沸刨仑。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杉武。三九已至,卻和暖如春辙售,著一層夾襖步出監(jiān)牢的瞬間轻抱,已是汗流浹背旦部。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留士八,地道東北人容燕。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓蘸秘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子醋虏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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