1. SVM簡介
支持向量機(jī)(support vector machines枪眉,SVM)是一種二分類模型捺檬,它的基本模型是定義在特征空間上的間隔最大的線性分類器,間隔最大使它有別于感知機(jī)瑰谜;SVM還包括核技巧欺冀,這使它成為實(shí)質(zhì)上的非線性分類器。SVM的學(xué)習(xí)策略就是間隔最大化萨脑,可形式化為一個(gè)求解凸二次規(guī)劃的問題隐轩,也等價(jià)于正則化的損失函數(shù)最小值問題。SVM的學(xué)習(xí)算法就是求解凸二次規(guī)劃的最優(yōu)算法渤早。
? ? 它在手寫識別數(shù)字和人臉識別中應(yīng)用廣泛职车,在文本和超文本的分類中舉足輕重,因?yàn)镾VM可以大量減少標(biāo)準(zhǔn)歸納和轉(zhuǎn)換設(shè)置中對標(biāo)記訓(xùn)練實(shí)例的需求鹊杖。同時(shí)悴灵,SVM也被用來執(zhí)行圖像的分類,并用于圖像分割系統(tǒng)骂蓖。實(shí)驗(yàn)結(jié)果表明积瞒,在僅僅三到四輪相關(guān)反饋之后,SVM就能實(shí)現(xiàn)比傳統(tǒng)的查詢細(xì)化方案高出一大截的搜索精度登下。除此之外茫孔,生物學(xué)和許多其他學(xué)科都是SVM的青睞者,SVM現(xiàn)在已經(jīng)廣泛用于蛋白質(zhì)分類被芳,現(xiàn)在化合物分類的業(yè)界平均水平可以達(dá)到90%以上的準(zhǔn)確率缰贝。在生物科學(xué)的尖端研究中,人們還使用支持向量機(jī)來識別用于模型預(yù)測的各種特征畔濒,以找出各種基因表現(xiàn)結(jié)果的影響因素剩晴。
2.SVM算法原理
SVM學(xué)習(xí)的基本想法是求解能夠正確劃分訓(xùn)練數(shù)據(jù)集并且?guī)缀伍g隔最大的分離超平面。如下圖所示侵状,即為分離超平面赞弥,對于線性可分的數(shù)據(jù)集來說毅整,這樣的超平面有無窮多個(gè)(即感知機(jī)),但是幾何間隔最大的分離超平面卻是唯一的绽左。
超平面與最近數(shù)據(jù)點(diǎn)之間的距離成為邊距毛嫉。可以將兩個(gè)類分開的最佳或最佳超平面是具有最大邊距的線妇菱。只有這些點(diǎn)與定義超平面和分類器的構(gòu)造有關(guān)。這些點(diǎn)稱為支持向量暴区。他們支持或定義超平面闯团。實(shí)際上,優(yōu)化算法用于找到使裕度最大化的系數(shù)的值仙粱。
SVM的三層理解:
3.支持向量機(jī)的分類
(1)線性可分支持向量機(jī)房交、硬間隔
(2)線性支持向量機(jī)、軟間隔
(3)非線性支持向量機(jī)伐割、Kernel SVM
支持向量機(jī)模型存在三寶:
(1)間隔:是指樣本點(diǎn)到超平面的距離候味。硬間隔是指對給定的樣本數(shù)據(jù)集中所以的樣本都能正確分類。對于線性不可分的樣本集隔心,無法滿足線性可分支持向量機(jī)的不等式約束白群,也就是不存在對所有樣本都能正確分類的超平面。這種情況可能是因?yàn)閱栴}本身是非線性的硬霍,也可能問題是線性可分的帜慢,但個(gè)別樣本點(diǎn)標(biāo)記錯(cuò)誤或存在誤差而導(dǎo)致樣本集線性不可分。
因此唯卖,我們可以允許對少量的樣本分類錯(cuò)誤粱玲,容忍特異點(diǎn)的存在,而對于去除特異點(diǎn)的樣本集是線性可分的拜轨,這時(shí)稱為軟間隔抽减。
(2)對偶
(3)核技巧
支持向量機(jī)和感知機(jī)在某些方面很相似,其相同點(diǎn):
(1)都是二分類模型
(2)都是通過一個(gè)分離超平民啊對特征進(jìn)行分類
不同點(diǎn):
(1)SVM是特殊的感知機(jī)
(2)感知機(jī)是用誤分類最小的策略橄碾,求得分離超平面卵沉,這時(shí)存在無窮個(gè)解,感知機(jī)利用間隔最大化求得最優(yōu)分離超平面堪嫂。如下圖所示偎箫。
????圖中的藍(lán)色和黃色圓點(diǎn)分別表示正負(fù)樣本,對于這個(gè)二分類皆串,從圖中我們可知淹办,在最上面的黃線和最下面的綠線之間的線條都是可以把訓(xùn)練樣本集完全分開的,這就是感知機(jī)的原理恶复,通過這些分離超平面把訓(xùn)練集分開怜森,這樣的分離超平面存在很多條速挑,比如圖中的虛線,從視覺上中間那條實(shí)線應(yīng)該是眾多線條中最優(yōu)的一條副硅,感知機(jī)對于學(xué)習(xí)的分離超平面由于優(yōu)化算法姥宝、學(xué)習(xí)率等不同因素,會隨機(jī)地學(xué)習(xí)到這眾多分離超平面的一條恐疲,當(dāng)學(xué)習(xí)到的是靠近上下邊緣的分離超平面是腊满,對于一個(gè)未知樣本,當(dāng)這個(gè)樣本稍微浮動一下培己,模型就很可能對他進(jìn)行誤分類了碳蛋,因此魯棒性很低,而支持向量機(jī)的目標(biāo)是找到圖中中間那條最優(yōu)的分離超平面省咨。
4. 學(xué)習(xí)的對偶算法
為求解支持向量機(jī)的最優(yōu)化問題肃弟,我們將公式10作為原始問題,應(yīng)用拉格朗日對偶性零蓉,通過求解對偶問題得到原始問題的最優(yōu)解笤受,這就是支持向量機(jī)的對偶算法。在約束最優(yōu)化問題中敌蜂,常常利用拉格朗日對偶性將原始問題轉(zhuǎn)換為對偶問題箩兽,通過解對偶問題而得到原始問題的解(最優(yōu)解是反的,值是一樣的)紊册。這是因?yàn)椋?/p>
? ? 1)對偶問題的對偶是原問題
? ? 2)無論原始問題與約束條件是否是凸的比肄,對偶問題都是凹問題,加個(gè)負(fù)號就變成凸問題了囊陡,凸問題容易優(yōu)化芳绩。
? ? 3)對偶問題可以給出原始問題一個(gè)下界
? ? 4)當(dāng)滿足一定條件時(shí),原始問題與對偶問題的解是完全等價(jià)的
5. sklearn中支持向量機(jī)的應(yīng)用
LinearSVC()類的主要參數(shù):
(1)C: float, default=1.0, 懲罰系數(shù)撞反,必須大于0妥色,默認(rèn)值1.0。用于設(shè)置對錯(cuò)誤分類的懲罰強(qiáng)度遏片,對于設(shè)置對錯(cuò)誤分類的懲罰強(qiáng)度嘹害,對于完全線性可分的硬間隔問題不需要設(shè)置。
(2)fit_intercept: boolean, optional(default=True):是否計(jì)算截距吮便,默認(rèn)為True笔呀。如果數(shù)據(jù)均值為0,則可以選擇False不計(jì)算截距髓需。
(3)multi_class: string许师,”ovr“ or "crammer_singer"(default='ovr'):多類別分類策略開關(guān)。對于多元分類問題,選擇'ovr'將使用多類別策略(one-vs-set)直接對多個(gè)類別進(jìn)行分類(默認(rèn)方法)微渠;選擇"crammer_singer"將主次進(jìn)行二值分類搭幻。
(4)class_weight:dict or "balanced", default=None,特征變量的加權(quán)系數(shù)逞盆。用于為某個(gè)特征變量設(shè)置權(quán)重檀蹋,默認(rèn)所有特征變量的權(quán)重相同。
結(jié)論:1)線性核云芦,尤其是多項(xiàng)式核函數(shù)在高次項(xiàng)時(shí)計(jì)算非常緩慢俯逾。
? ? ? ? ? ?2)rbf和多項(xiàng)式核函數(shù)都不擅長處理量綱不統(tǒng)一的數(shù)據(jù)集
這兩個(gè)缺點(diǎn)都可以由數(shù)據(jù)無量綱化來解決。因此舅逸,SVM執(zhí)行之前纱昧,非常推薦先進(jìn)行數(shù)據(jù)的無量綱化!
svc.score(): 返回給定測試數(shù)據(jù)和標(biāo)簽的平均準(zhǔn)確度堡赔。
5.2 二分類SVC中樣本不均衡問題:重要參數(shù)class_weight
? ? 首先,分類模型天生會傾向于多數(shù)的類设联,讓多數(shù)類更容易被判斷正確善已,少數(shù)類被犧牲掉。因?yàn)閷τ谀P投岳肜瑯颖玖吭酱蟮臉?biāo)簽可以學(xué)習(xí)的信息越多换团,算法就會更加依賴于從多數(shù)類中學(xué)到的信息來進(jìn)行判斷。如果我們希望捕獲少數(shù)類宫蛆,模型就會失敗艘包。其次,模型評估指標(biāo)會失去意義耀盗。這種分類狀況下想虎,即便模型什么也不做,全把所有人都當(dāng)成不會犯罪的人叛拷,準(zhǔn)確率也能非常高舌厨,這使得模型評估指標(biāo)accuracy變得毫無意義,根本無法達(dá)到我們的“要識別出會犯罪的人”的建模目的忿薇。
? ? 所以現(xiàn)在裙椭,我們首先要讓算法意識到數(shù)據(jù)的標(biāo)簽是不均衡的,通過施加一些懲罰或者改變樣本本身署浩,來讓模型向著捕獲少數(shù)類的方向建模揉燃。然后,我們要改進(jìn)我們的模型評估指標(biāo)筋栋,使用更加針對于少數(shù)類的指標(biāo)來優(yōu)化模型炊汤。要解決第一個(gè)問題,我們在邏輯回歸中已經(jīng)介紹了一些基本方法,比如上采樣下采樣婿崭。但這些采樣方法會增加樣本的總數(shù)拨拓,對于支持向量機(jī)這個(gè)樣本總是對計(jì)算速度影響巨大的算法來說,我們完全不想輕易地增加樣本數(shù)量氓栈。況且渣磷,支持向量機(jī)中的決策僅僅受到?jīng)Q策邊界的影響,而決策邊界僅僅受到參數(shù)C和支持向量的影響授瘦,單純地增加樣本數(shù)量不僅會增加計(jì)算時(shí)間醋界,可能還會增加無數(shù)對決策邊界無影響的樣本點(diǎn)。因此在支持向量機(jī)中提完,我們要大力依賴我們調(diào)節(jié)樣本均衡的參數(shù):SVC類的class_weight和接口fit可以設(shè)定的sample_weight形纺。
5.3 SVC模型評估指標(biāo)
? ? 混淆矩陣是二分類問題的多維衡量指標(biāo)體系,在樣本不平衡時(shí)極其有用徒欣。在混淆矩陣中逐样,我們將少數(shù)類認(rèn)為是正例,多數(shù)類認(rèn)為是負(fù)例打肝。在決策樹脂新,隨機(jī)森林這些普通的分類算法里,即是說少數(shù)類是1粗梭,多數(shù)類是0争便。在SVM里,就是說少數(shù)類是1断医,多數(shù)類是-1滞乙。普通的混淆矩陣,一般使用{0,1}來表示鉴嗤≌镀簦混淆矩陣中,永遠(yuǎn)是真實(shí)值在前醉锅,預(yù)測值在后浇垦。
ROC曲線及相關(guān)問題
? ? 基于混淆矩陣,總共有六個(gè)指標(biāo):準(zhǔn)確率Accuracy荣挨,精確度Precision男韧,召回率Recall,精確度和召回度的平衡指標(biāo)F measure, 特異度Specificity默垄,以及假正率FPR此虑。
? ? 其中,假正率有一個(gè)非常重要的應(yīng)用:我們在追求較高的Recall的時(shí)候口锭,Precision會下降朦前,就是說隨著更多的少數(shù)類被捕捉出來介杆,會有更多的多數(shù)類被判斷錯(cuò)誤,但我們很好奇韭寸,隨著Recall的逐漸增加春哨,模型將多數(shù)類判斷錯(cuò)誤的能力如何變化呢?我們希望理解恩伺,我每判斷正確一個(gè)少數(shù)類赴背,就有多少個(gè)多數(shù)類會被判斷錯(cuò)誤。假正率正好可以幫助我們衡量這個(gè)變化晶渠。相對的凰荚,Precision無法判斷這些判斷錯(cuò)誤的多數(shù)類在全部多數(shù)類中究竟占多大的比例,所以無法在提升Recall的過程中也顧及到模型整體的Accuracy褒脯。因此便瑟,我們可以使用Recall和FPR之間的平衡,來替代Recall和Precision之間的平衡番川,讓我們衡量模型在盡量捕捉少數(shù)類的時(shí)候到涂,誤傷多數(shù)類的情況如何變化,這就是我們的ROC曲線衡量的平衡颁督。
? ? ROC曲線养盗,全稱The Receiver Operating Characteristic Curve。這是一條以下不同閾值下的假正率FPR為橫坐標(biāo)适篙,不同閾值下的召回率Recall為縱坐標(biāo)的曲線。
6. SVM的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
(1)有嚴(yán)格的數(shù)學(xué)理論支持箫爷,可解釋性強(qiáng)嚷节,不依靠統(tǒng)計(jì)方法,從而簡化了通常的分類和回歸問題
(2)解決小樣本下機(jī)器學(xué)習(xí)問題虎锚;
(3)能找出對任務(wù)至關(guān)重要的關(guān)鍵樣本(即:支持向量)
(4)采用核技巧之后硫痰,可以處理非線性分類/回歸任務(wù);可以解決高維問題窜护,即大型特征空間效斑;
(5)最終決策函數(shù)只由少數(shù)的支持向量所確定,計(jì)算的復(fù)雜性取決于支持向量的數(shù)目柱徙,而不是樣本空間的維數(shù)缓屠,這在某種意義上避免了”維數(shù)災(zāi)難“。
缺點(diǎn):
(1)訓(xùn)練時(shí)間長护侮。當(dāng)采用SMO算法時(shí)敌完,由于每次都需要挑選一對參數(shù),因此時(shí)間復(fù)雜度羊初,其中N為訓(xùn)練樣本的數(shù)量滨溉;
(2)當(dāng)采用核技巧時(shí),如果需要存儲核矩陣,則空間復(fù)雜度為晦攒。對非線性問題沒有通用解決方案闽撤,有時(shí)候很難找到一個(gè)合適的核函數(shù);
(3)對于核函數(shù)的高維映射解釋力不強(qiáng)脯颜,尤其是徑向基函數(shù)哟旗;
(4)模型預(yù)測時(shí),預(yù)測時(shí)間與支持向量的個(gè)數(shù)成正比伐脖。當(dāng)支持向量的數(shù)量較大時(shí)热幔,預(yù)測計(jì)算復(fù)雜度較高。
(5)對缺失數(shù)據(jù)敏感讼庇;
因此支持向量機(jī)目前只適合小批量樣本的任務(wù)绎巨,無法適應(yīng)百萬條甚至上億樣本的任務(wù)。
7.適應(yīng)場景
? ? SVM主要用于分類問題蠕啄,主要的應(yīng)用場景有字符識別场勤、面部識別、行人檢測歼跟、文本分類等領(lǐng)域和媳。在機(jī)器學(xué)習(xí)領(lǐng)域,SVM是有監(jiān)督的學(xué)習(xí)模型哈街,通常用來進(jìn)行模式識別留瞳、分類(異常值檢測)以及回歸分析。