SVM是一種二類分類模型,其求解目標(biāo)在于確定一個(gè)分類的超平面,以最大化特征空間上的間隔。分類超平面的確定只取決于少數(shù)的樣本信息,這些關(guān)鍵的樣本被稱之為支持向量Support Vector,這也是SVM—支持向量機(jī)名稱的由來。
首先我們舉一個(gè)二維空間的小例子,并假設(shè)樣本是線性可分的,這樣我們就可以在二維空間里劃一條直線(高維空間的超平面在二維空間表現(xiàn)為直線),完全分開所有的正負(fù)樣本。那么引出一個(gè)問題,顯然存在多條區(qū)分正負(fù)樣本的直線(例如下圖的實(shí)線和虛線),哪條是更好的選擇?
從直觀上我們希望正負(fù)樣本分得越開越好,也就是正負(fù)樣本之間的幾何間隔越大越好。這是因?yàn)榫嚯x分類超平面越近的樣本,分類的置信度越低(實(shí)際上幾何間隔代表了分類器的誤差上界)。SVM的優(yōu)化目標(biāo),正是最大化最接近分類超平面的點(diǎn)到分類超平面的距離。
我們把這個(gè)二維的分類超平面設(shè)為f(x)=wTx+b=0。把樣本x代入f(x)中,如果得到的結(jié)果小于0,我們對該樣本標(biāo)一個(gè)-1的類別標(biāo)簽yi,大于0則標(biāo)一個(gè)+1的yi。(約定為+1或-1只是為了下面的推導(dǎo)便利而已)。
首先定義函數(shù)間隔(function margin):
γ?=|wTx+b|=yi(wTx+b)
注意前面乘上yi可以保證這個(gè)margin的非負(fù)性(因?yàn)閒(x)<0對應(yīng)yi=?1的那些樣本)。
如下圖所示,對任意不在分類超平面上的點(diǎn)xi,我們可以依賴它到分類超平面的垂直投影x0,計(jì)算出它到分類超平面上的幾何間隔(geometrical margin):
γ?=|wTxi+b|||w||=yi(wTx+b)||w||=γ?||w||
(||w||是向量w的范數(shù),是對w長度的一種度量)。于是我們得到了函數(shù)間隔和幾何間隔的數(shù)值關(guān)系。
假定所有樣本到分類超平面的函數(shù)間隔最小值表示為γ?,我們可以把SVM的優(yōu)化問題描述成以下表達(dá)式:
maxγ?=γ?/||w||,s.t.yi(wTx+b)>=γ?,i=1,…,n
由于γ?和||w||是線性關(guān)聯(lián)的,而即便在超平面固定的情況下,||w||仍是可變化的(只要b隨著||w||等比縮放,比如x1+x2+1=0和2x1+2x2+2=0其實(shí)是一個(gè)平面),那么γ?實(shí)際上不影響SVM優(yōu)化問題的求解,為了簡化問題,我們設(shè)γ?=1,從而把優(yōu)化問題轉(zhuǎn)化為:
maxγ?=1/||w||,s.t.yi(wTx+b)>=1,i=1,…,n
這個(gè)問題可以轉(zhuǎn)化為一個(gè)等價(jià)的二次規(guī)劃問題,也就是說它必然能得到一個(gè)全局的最優(yōu)解。
通過求解這個(gè)問題,我們可以得到了一個(gè)最大化幾何間隔的分類超平面(如下圖紅線所示),另外兩條線到紅線的距離都等于1/||w||,而橘黃色的樣本就是支持向量Support Vector。
到此為止,通過最大化幾何間隔,使得該分類器對樣本分類時(shí)有了最大的置信度,準(zhǔn)確的說,是對置信度最小的樣本有了最大的置信度,這正是SVM的核心思想。
文章來源: http://guoze.me/2014/07/14/svm-introduction/
我個(gè)人一直很喜歡算法一類的東西,在我看來算法是人類智慧的精華,其中蘊(yùn)含著無與倫比的美感。而每次將學(xué)過的算法應(yīng)用到實(shí)際中,并解決了實(shí)際問題后,那種快感更是我在其它地方體會(huì)不到的。
一直想寫關(guān)于算法的博文,也曾寫過零散的兩篇,但也許是相比于工程性文章來說太小眾,并沒有引起大家的興趣。最近面臨畢業(yè)找工作,為了能給自己增加籌碼,決定再次復(fù)習(xí)算法方面的知識,我決定趁這個(gè)機(jī)會(huì),寫一系列關(guān)于算法的文章。這樣做,主要是為了加強(qiáng)自己復(fù)習(xí)的效果,我想,如果能將復(fù)習(xí)的東西用自己的理解寫成文章,勢必比單純的讀書做題掌握的更牢固,也更能觸發(fā)自己的思考。如果能有感興趣的朋友從中有所收獲,那自然更好。
這個(gè)系列我將其命名為“算法雜貨鋪”,其原因就是這些文章一大特征就是“雜”,我不會(huì)專門討論堆棧、鏈表、二叉樹、查找、排序等任何一本數(shù)據(jù)結(jié)構(gòu)教科書都會(huì)講的基礎(chǔ)內(nèi)容,我會(huì)從一個(gè)“專題”出發(fā),如概率算法、分類算法、NP問題、遺傳算法等,然后做一個(gè)引申,可能會(huì)涉及到算法與數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、概率論、統(tǒng)計(jì)學(xué)、運(yùn)籌學(xué)、數(shù)據(jù)挖掘、形式語言與自動(dòng)機(jī)等諸多方面,因此其內(nèi)容結(jié)構(gòu)就像一個(gè)雜貨鋪。當(dāng)然,我會(huì)竭盡所能,盡量使內(nèi)容“雜而不亂”。
貝葉斯分類是一類分類算法的總稱,這類算法均以貝葉斯定理為基礎(chǔ),故統(tǒng)稱為貝葉斯分類。本文作為分類算法的第一篇,將首先介紹分類問題,對分類問題進(jìn)行一個(gè)正式的定義。然后,介紹貝葉斯分類算法的基礎(chǔ)——貝葉斯定理。最后,通過實(shí)例討論貝葉斯分類中最簡單的一種:樸素貝葉斯分類。
對于分類問題,其實(shí)誰都不會(huì)陌生,說我們每個(gè)人每天都在執(zhí)行分類操作一點(diǎn)都不夸張,只是我們沒有意識到罷了。例如,當(dāng)你看到一個(gè)陌生人,你的腦子下意識判斷TA是男是女;你可能經(jīng)常會(huì)走在路上對身旁的朋友說“這個(gè)人一看就很有錢、那邊有個(gè)非主流”之類的話,其實(shí)這就是一種分類操作。
從數(shù)學(xué)角度來說,分類問題可做如下定義:
已知集合: 和 ,確定映射規(guī)則 ,使得任意 有且僅有一個(gè) 使得 成立。(不考慮模糊數(shù)學(xué)里的模糊集情況)
其中C叫做類別集合,其中每一個(gè)元素是一個(gè)類別,而I叫做項(xiàng)集合,其中每一個(gè)元素是一個(gè)待分類項(xiàng),f叫做分類器。分類算法的任務(wù)就是構(gòu)造分類器f。
這里要著重強(qiáng)調(diào),分類問題往往采用經(jīng)驗(yàn)性方法構(gòu)造映射規(guī)則,即一般情況下的分類問題缺少足夠的信息來構(gòu)造100%正確的映射規(guī)則,而是通過對經(jīng)驗(yàn)數(shù)據(jù)的學(xué)習(xí)從而實(shí)現(xiàn)一定概率意義上正確的分類,因此所訓(xùn)練出的分類器并不是一定能將每個(gè)待分類項(xiàng)準(zhǔn)確映射到其分類,分類器的質(zhì)量與分類器構(gòu)造方法、待分類數(shù)據(jù)的特性以及訓(xùn)練樣本數(shù)量等諸多因素有關(guān)。
例如,醫(yī)生對病人進(jìn)行診斷就是一個(gè)典型的分類過程,任何一個(gè)醫(yī)生都無法直接看到病人的病情,只能觀察病人表現(xiàn)出的癥狀和各種化驗(yàn)檢測數(shù)據(jù)來推斷病情,這時(shí)醫(yī)生就好比一個(gè)分類器,而這個(gè)醫(yī)生診斷的準(zhǔn)確率,與他當(dāng)初受到的教育方式(構(gòu)造方法)、病人的癥狀是否突出(待分類數(shù)據(jù)的特性)以及醫(yī)生的經(jīng)驗(yàn)多少(訓(xùn)練樣本數(shù)量)都有密切關(guān)系。
每次提到貝葉斯定理,我心中的崇敬之情都油然而生,倒不是因?yàn)檫@個(gè)定理多高深,而是因?yàn)樗貏e有用。這個(gè)定理解決了現(xiàn)實(shí)生活里經(jīng)常遇到的問題:已知某條件概率,如何得到兩個(gè)事件交換后的概率,也就是在已知P(A|B)的情況下如何求得P(B|A)。這里先解釋什么是條件概率:
表示事件B已經(jīng)發(fā)生的前提下,事件A發(fā)生的概率,叫做事件B發(fā)生下事件A的條件概率。其基本求解公式為: 。
貝葉斯定理之所以有用,是因?yàn)槲覀冊谏钪薪?jīng)常遇到這種情況:我們可以很容易直接得出P(A|B),P(B|A)則很難直接得出,但我們更關(guān)心P(B|A),貝葉斯定理就為我們打通從P(A|B)獲得P(B|A)的道路。
下面不加證明地直接給出貝葉斯定理:
樸素貝葉斯分類是一種十分簡單的分類算法,叫它樸素貝葉斯分類是因?yàn)檫@種方法的思想真的很樸素,樸素貝葉斯的思想基礎(chǔ)是這樣的:對于給出的待分類項(xiàng),求解在此項(xiàng)出現(xiàn)的條件下各個(gè)類別出現(xiàn)的概率,哪個(gè)最大,就認(rèn)為此待分類項(xiàng)屬于哪個(gè)類別。通俗來說,就好比這么個(gè)道理,你在街上看到一個(gè)黑人,我問你你猜這哥們哪里來的,你十有八九猜非洲。為什么呢?因?yàn)楹谌酥蟹侵奕说谋嚷首罡?,?dāng)然人家也可能是美洲人或亞洲人,但在沒有其它可用信息下,我們會(huì)選擇條件概率最大的類別,這就是樸素貝葉斯的思想基礎(chǔ)。
樸素貝葉斯分類的正式定義如下:
1、設(shè) 為一個(gè)待分類項(xiàng),而每個(gè)a為x的一個(gè)特征屬性。
2、有類別集合 。
3、計(jì)算 。
4、如果 ,則 。
那么現(xiàn)在的關(guān)鍵就是如何計(jì)算第3步中的各個(gè)條件概率。我們可以這么做:
1、找到一個(gè)已知分類的待分類項(xiàng)集合,這個(gè)集合叫做訓(xùn)練樣本集。
2、統(tǒng)計(jì)得到在各類別下各個(gè)特征屬性的條件概率估計(jì)。即 。
3、如果各個(gè)特征屬性是條件獨(dú)立的,則根據(jù)貝葉斯定理有如下推導(dǎo):
因?yàn)榉帜笇τ谒蓄悇e為常數(shù),因?yàn)槲覀冎灰獙⒎肿幼畲蠡钥伞S忠驗(yàn)楦魈卣鲗傩允菞l件獨(dú)立的,所以有:
根據(jù)上述分析,樸素貝葉斯分類的流程可以由下圖表示(暫時(shí)不考慮驗(yàn)證):
可以看到,整個(gè)樸素貝葉斯分類分為三個(gè)階段:
第一階段——準(zhǔn)備工作階段,這個(gè)階段的任務(wù)是為樸素貝葉斯分類做必要的準(zhǔn)備,主要工作是根據(jù)具體情況確定特征屬性,并對每個(gè)特征屬性進(jìn)行適當(dāng)劃分,然后由人工對一部分待分類項(xiàng)進(jìn)行分類,形成訓(xùn)練樣本集合。這一階段的輸入是所有待分類數(shù)據(jù),輸出是特征屬性和訓(xùn)練樣本。這一階段是整個(gè)樸素貝葉斯分類中唯一需要人工完成的階段,其質(zhì)量對整個(gè)過程將有重要影響,分類器的質(zhì)量很大程度上由特征屬性、特征屬性劃分及訓(xùn)練樣本質(zhì)量決定。
第二階段——分類器訓(xùn)練階段,這個(gè)階段的任務(wù)就是生成分類器,主要工作是計(jì)算每個(gè)類別在訓(xùn)練樣本中的出現(xiàn)頻率及每個(gè)特征屬性劃分對每個(gè)類別的條件概率估計(jì),并將結(jié)果記錄。其輸入是特征屬性和訓(xùn)練樣本,輸出是分類器。這一階段是機(jī)械性階段,根據(jù)前面討論的公式可以由程序自動(dòng)計(jì)算完成。
第三階段——應(yīng)用階段。這個(gè)階段的任務(wù)是使用分類器對待分類項(xiàng)進(jìn)行分類,其輸入是分類器和待分類項(xiàng),輸出是待分類項(xiàng)與類別的映射關(guān)系。這一階段也是機(jī)械性階段,由程序完成。
這一節(jié)討論P(yáng)(a|y)的估計(jì)。
由上文看出,計(jì)算各個(gè)劃分的條件概率P(a|y)是樸素貝葉斯分類的關(guān)鍵性步驟,當(dāng)特征屬性為離散值時(shí),只要很方便的統(tǒng)計(jì)訓(xùn)練樣本中各個(gè)劃分在每個(gè)類別中出現(xiàn)的頻率即可用來估計(jì)P(a|y),下面重點(diǎn)討論特征屬性是連續(xù)值的情況。
當(dāng)特征屬性為連續(xù)值時(shí),通常假定其值服從高斯分布(也稱正態(tài)分布)。即:
而
因此只要計(jì)算出訓(xùn)練樣本中各個(gè)類別中此特征項(xiàng)劃分的各均值和標(biāo)準(zhǔn)差,代入上述公式即可得到需要的估計(jì)值。均值與標(biāo)準(zhǔn)差的計(jì)算在此不再贅述。
另一個(gè)需要討論的問題就是當(dāng)P(a|y)=0怎么辦,當(dāng)某個(gè)類別下某個(gè)特征項(xiàng)劃分沒有出現(xiàn)時(shí),就是產(chǎn)生這種現(xiàn)象,這會(huì)令分類器質(zhì)量大大降低。為了解決這個(gè)問題,我們引入Laplace校準(zhǔn),它的思想非常簡單,就是對沒類別下所有劃分的計(jì)數(shù)加1,這樣如果訓(xùn)練樣本集數(shù)量充分大時(shí),并不會(huì)對結(jié)果產(chǎn)生影響,并且解決了上述頻率為0的尷尬局面。
下面討論一個(gè)使用樸素貝葉斯分類解決實(shí)際問題的例子,為了簡單起見,對例子中的數(shù)據(jù)做了適當(dāng)?shù)暮喕?
這個(gè)問題是這樣的,對于SNS社區(qū)來說,不真實(shí)賬號(使用虛假身份或用戶的小號)是一個(gè)普遍存在的問題,作為SNS社區(qū)的運(yùn)營商,希望可以檢測出這些不真實(shí)賬號,從而在一些運(yùn)營分析報(bào)告中避免這些賬號的干擾,亦可以加強(qiáng)對SNS社區(qū)的了解與監(jiān)管。
如果通過純?nèi)斯z測,需要耗費(fèi)大量的人力,效率也十分低下,如能引入自動(dòng)檢測機(jī)制,必將大大提升工作效率。這個(gè)問題說白了,就是要將社區(qū)中所有賬號在真實(shí)賬號和不真實(shí)賬號兩個(gè)類別上進(jìn)行分類,下面我們一步一步實(shí)現(xiàn)這個(gè)過程。
首先設(shè)C=0表示真實(shí)賬號,C=1表示不真實(shí)賬號。
1、確定特征屬性及劃分
這一步要找出可以幫助我們區(qū)分真實(shí)賬號與不真實(shí)賬號的特征屬性,在實(shí)際應(yīng)用中,特征屬性的數(shù)量是很多的,劃分也會(huì)比較細(xì)致,但這里為了簡單起見,我們用少量的特征屬性以及較粗的劃分,并對數(shù)據(jù)做了修改。
我們選擇三個(gè)特征屬性:a1:日志數(shù)量/注冊天數(shù),a2:好友數(shù)量/注冊天數(shù),a3:是否使用真實(shí)頭像。在SNS社區(qū)中這三項(xiàng)都是可以直接從數(shù)據(jù)庫里得到或計(jì)算出來的。
下面給出劃分:a1:{a<=0.05, 0.05<a<0.2, a>=0.2},a1:{a<=0.1, 0.1<a<0.8, a>=0.8},a3:{a=0(不是),a=1(是)}。
2、獲取訓(xùn)練樣本
這里使用運(yùn)維人員曾經(jīng)人工檢測過的1萬個(gè)賬號作為訓(xùn)練樣本。
3、計(jì)算訓(xùn)練樣本中每個(gè)類別的頻率
用訓(xùn)練樣本中真實(shí)賬號和不真實(shí)賬號數(shù)量分別除以一萬,得到:
4、計(jì)算每個(gè)類別條件下各個(gè)特征屬性劃分的頻率
5、使用分類器進(jìn)行鑒別
下面我們使用上面訓(xùn)練得到的分類器鑒別一個(gè)賬號,這個(gè)賬號使用非真實(shí)頭像,日志數(shù)量與注冊天數(shù)的比率為0.1,好友數(shù)與注冊天數(shù)的比率為0.2。
可以看到,雖然這個(gè)用戶沒有使用真實(shí)頭像,但是通過分類器的鑒別,更傾向于將此賬號歸入真實(shí)賬號類別。這個(gè)例子也展示了當(dāng)特征屬性充分多時(shí),樸素貝葉斯分類對個(gè)別屬性的抗干擾性。
雖然后續(xù)還會(huì)提到其它分類算法,不過這里我想先提一下如何評價(jià)分類器的質(zhì)量。
首先要定義,分類器的正確率指分類器正確分類的項(xiàng)目占所有被分類項(xiàng)目的比率。
通常使用回歸測試來評估分類器的準(zhǔn)確率,最簡單的方法是用構(gòu)造完成的分類器對訓(xùn)練數(shù)據(jù)進(jìn)行分類,然后根據(jù)結(jié)果給出正確率評估。但這不是一個(gè)好方法,因?yàn)槭褂糜?xùn)練數(shù)據(jù)作為檢測數(shù)據(jù)有可能因?yàn)檫^分?jǐn)M合而導(dǎo)致結(jié)果過于樂觀,所以一種更好的方法是在構(gòu)造初期將訓(xùn)練數(shù)據(jù)一分為二,用一部分構(gòu)造分類器,然后用另一部分檢測分類器的準(zhǔn)確率。
文章來源: http://www.cnblogs.com/leoo2sk/archive/2010/09/17/1829190.html
生活中很多場合需要用到分類,比如新聞分類、病人分類等等。
本文介紹 樸素貝葉斯分類器 (Naive Bayes classifier),它是一種簡單有效的常用分類算法。
一、病人分類的例子
讓我從一個(gè)例子開始講起,你會(huì)看到貝葉斯分類器很好懂,一點(diǎn)都不難。
某個(gè)醫(yī)院早上收了六個(gè)門診病人,如下表。
癥狀 職業(yè) 疾病
打噴嚏 護(hù)士 感冒
打噴嚏 農(nóng)夫 過敏
頭痛 建筑工人 腦震蕩
頭痛 建筑工人 感冒
打噴嚏 教師 感冒
頭痛 教師 腦震蕩
現(xiàn)在又來了第七個(gè)病人,是一個(gè)打噴嚏的建筑工人。請問他患上感冒的概率有多大?
根據(jù) 貝葉斯定理 :
P(A|B) = P(B|A) P(A) / P(B)
可得
P(感冒|打噴嚏x建筑工人)
= P(打噴嚏x建筑工人|感冒) x P(感冒)
/ P(打噴嚏x建筑工人)
假定"打噴嚏"和"建筑工人"這兩個(gè)特征是獨(dú)立的,因此,上面的等式就變成了
P(感冒|打噴嚏x建筑工人)
= P(打噴嚏|感冒) x P(建筑工人|感冒) x P(感冒)
/ P(打噴嚏) x P(建筑工人)
這是可以計(jì)算的。
P(感冒|打噴嚏x建筑工人)
= 0.66 x 0.33 x 0.5 / 0.5 x 0.33
= 0.66
因此,這個(gè)打噴嚏的建筑工人,有66%的概率是得了感冒。同理,可以計(jì)算這個(gè)病人患上過敏或腦震蕩的概率。比較這幾個(gè)概率,就可以知道他最可能得什么病。
這就是貝葉斯分類器的基本方法:在統(tǒng)計(jì)資料的基礎(chǔ)上,依據(jù)某些特征,計(jì)算各個(gè)類別的概率,從而實(shí)現(xiàn)分類。
二、樸素貝葉斯分類器的公式
假設(shè)某個(gè)體有n項(xiàng)特征(Feature),分別為F 1 、F 2 、...、F n 。現(xiàn)有m個(gè)類別(Category),分別為C 1 、C 2 、...、C m 。貝葉斯分類器就是計(jì)算出概率最大的那個(gè)分類,也就是求下面這個(gè)算式的最大值:
P(C|F1F2...Fn)
= P(F1F2...Fn|C)P(C) / P(F1F2...Fn)
由于 P(F1F2...Fn) 對于所有的類別都是相同的,可以省略,問題就變成了求
P(F1F2...Fn|C)P(C)
的最大值。
樸素貝葉斯分類器則是更進(jìn)一步,假設(shè)所有特征都彼此獨(dú)立,因此
P(F1F2...Fn|C)P(C)
= P(F1|C)P(F2|C) ... P(Fn|C)P(C)
上式等號右邊的每一項(xiàng),都可以從統(tǒng)計(jì)資料中得到,由此就可以計(jì)算出每個(gè)類別對應(yīng)的概率,從而找出最大概率的那個(gè)類。
雖然"所有特征彼此獨(dú)立"這個(gè)假設(shè),在現(xiàn)實(shí)中不太可能成立,但是它可以大大簡化計(jì)算,而且有研究表明對分類結(jié)果的準(zhǔn)確性影響不大。
下面再通過兩個(gè)例子,來看如何使用樸素貝葉斯分類器。
三、賬號分類的例子
本例摘自張洋的 《算法雜貨鋪----分類算法之樸素貝葉斯分類》 。
根據(jù)某社區(qū)網(wǎng)站的抽樣統(tǒng)計(jì),該站10000個(gè)賬號中有89%為真實(shí)賬號(設(shè)為C 0 ),11%為虛假賬號(設(shè)為C 1 )。
C0 = 0.89
C1 = 0.11
接下來,就要用統(tǒng)計(jì)資料判斷一個(gè)賬號的真實(shí)性。假定某一個(gè)賬號有以下三個(gè)特征:
F1: 日志數(shù)量/注冊天數(shù)
F2: 好友數(shù)量/注冊天數(shù)
F3: 是否使用真實(shí)頭像(真實(shí)頭像為1,非真實(shí)頭像為0)F1 = 0.1
F2 = 0.2
F3 = 0
請問該賬號是真實(shí)賬號還是虛假賬號?
方法是使用樸素貝葉斯分類器,計(jì)算下面這個(gè)計(jì)算式的值。
P(F1|C)P(F2|C)P(F3|C)P(C)
雖然上面這些值可以從統(tǒng)計(jì)資料得到,但是這里有一個(gè)問題:F1和F2是連續(xù)變量,不適宜按照某個(gè)特定值計(jì)算概率。
一個(gè)技巧是將連續(xù)值變?yōu)殡x散值,計(jì)算區(qū)間的概率。比如將F1分解成[0, 0.05]、(0.05, 0.2)、[0.2, +∞]三個(gè)區(qū)間,然后計(jì)算每個(gè)區(qū)間的概率。在我們這個(gè)例子中,F(xiàn)1等于0.1,落在第二個(gè)區(qū)間,所以計(jì)算的時(shí)候,就使用第二個(gè)區(qū)間的發(fā)生概率。
根據(jù)統(tǒng)計(jì)資料,可得:
P(F1|C0) = 0.5, P(F1|C1) = 0.1
P(F2|C0) = 0.7, P(F2|C1) = 0.2
P(F3|C0) = 0.2, P(F3|C1) = 0.9
因此,
P(F1|C0) P(F2|C0) P(F3|C0) P(C0)
= 0.5 x 0.7 x 0.2 x 0.89
= 0.0623P(F1|C1) P(F2|C1) P(F3|C1) P(C1)
= 0.1 x 0.2 x 0.9 x 0.11
= 0.00198
可以看到,雖然這個(gè)用戶沒有使用真實(shí)頭像,但是他是真實(shí)賬號的概率,比虛假賬號高出30多倍,因此判斷這個(gè)賬號為真。
四、性別分類的例子
本例摘自 維基百科 ,關(guān)于處理連續(xù)變量的另一種方法。
下面是一組人類身體特征的統(tǒng)計(jì)資料。
性別 身高(英尺) 體重(磅) 腳掌(英寸)
男 6 180 12
男 5.92 190 11
男 5.58 170 12
男 5.92 165 10
女 5 100 6
女 5.5 150 8
女 5.42 130 7
女 5.75 150 9
已知某人身高6英尺、體重130磅,腳掌8英寸,請問該人是男是女?
根據(jù)樸素貝葉斯分類器,計(jì)算下面這個(gè)式子的值。
P(身高|性別) x P(體重|性別) x P(腳掌|性別) x P(性別)
這里的困難在于,由于身高、體重、腳掌都是連續(xù)變量,不能采用離散變量的方法計(jì)算概率。而且由于樣本太少,所以也無法分成區(qū)間計(jì)算。怎么辦?
這時(shí),可以假設(shè)男性和女性的身高、體重、腳掌都是正態(tài)分布,通過樣本計(jì)算出均值和方差,也就是得到正態(tài)分布的密度函數(shù)。有了密度函數(shù),就可以把值代入,算出某一點(diǎn)的密度函數(shù)的值。
比如,男性的身高是均值5.855、方差0.035的正態(tài)分布。所以,男性的身高為6英尺的概率的相對值等于1.5789(大于1并沒有關(guān)系,因?yàn)檫@里是密度函數(shù)的值,只用來反映各個(gè)值的相對可能性)。
有了這些數(shù)據(jù)以后,就可以計(jì)算性別的分類了。
P(身高=6|男) x P(體重=130|男) x P(腳掌=8|男) x P(男)
= 6.1984 x e -9P(身高=6|女) x P(體重=130|女) x P(腳掌=8|女) x P(女)
= 5.3778 x e -4
可以看到,女性的概率比男性要高出將近10000倍,所以判斷該人為女性。
(完)
文章來源: http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html
Libsvm和Liblinear的使用經(jīng)驗(yàn)談
Libsvm 和 Liblinear 都是國立臺灣大學(xué)的 Chih-Jen Lin 博士開發(fā)的,Libsvm主要是用來進(jìn)行非線性svm 分類器的生成,提出有一段時(shí)間了,而Liblinear則是去年才創(chuàng)建的,主要是應(yīng)對large-scale的data classification,因?yàn)閘inear分類器的訓(xùn)練比非線性分類器的訓(xùn)練計(jì)算復(fù)雜度要低很多,時(shí)間也少很多,而且在large scale data上的性能和非線性的分類器性能相當(dāng),所以Liblinear是針對大數(shù)據(jù)而生的。
兩者都是一個(gè)跨平臺的通用工具庫,支持windows/linux/mac os,代碼本身是c++寫的,同時(shí)也有matlab,python,java,c/c++擴(kuò)展接口,方便不同語言環(huán)境使用,可以說是科研和企業(yè)人員的首選!像我這樣在學(xué)校的一般用matlab/c++,而我同學(xué)在百度則主要用的是python/c++,所以只是各自側(cè)重不一樣,但所使用的核心還是其svm庫。
以上Libsvm和Liblinear的主頁上都有windows下的binary文件下載,zip,tar格式都有,解壓后,找到matlab子文件目錄,參看里面的readme文件,需要在matlab中進(jìn)入此目錄,運(yùn)行make.m文件,matlab會(huì)根據(jù)本機(jī)默認(rèn)的c/c++編譯器將.c文件生成為.mexw32文件(由于我是32位操作系統(tǒng),此處為mexw32,對于64位os,則對應(yīng)為mexw64),提供matlab下能使用的接口。之后生成了這些.mexw32文件復(fù)制到你自己的matlab工程根目錄中,就可以在matlab文件中調(diào)用libsvm/liblinear庫中的函數(shù)了~
http://blog.sina.com.cn/s/blog_5bd2cb260100ev25.html
這位網(wǎng)友對libsvm在matlab中的使用說明的很詳細(xì),可以參考下。
有關(guān)Liblinear和Libsvm各自的優(yōu)勢可以歸納如下:
1.libsvm用來就解決通用典型的分類問題
2.liblinear主要為大規(guī)模數(shù)據(jù)的線性模型設(shè)計(jì)
以下為一位網(wǎng)友采用liblinear進(jìn)行數(shù)據(jù)分類的實(shí)驗(yàn)性能說明“
”今天試用了以下liblinear,速度很快(快到我沒有想到),
我的實(shí)驗(yàn)數(shù)據(jù):
訓(xùn)練集:21504 * 1500(1500是樣本的數(shù)量,21504是維度)
測試集:21504 * 2985
速度用秒來衡量,20次實(shí)驗(yàn)總共不到2分鐘。
同樣的問題我用了libsvm實(shí)驗(yàn)速度上相差太大,libsvm實(shí)驗(yàn)5次,每次將近10分鐘,時(shí)間是其次,發(fā)現(xiàn)一個(gè)問題就是,libsvm比liblinear的結(jié)果相差1個(gè)百分點(diǎn),沒有讀liblinear的文章,不知道問題出在那個(gè)地方,libsvm我直接用的默認(rèn)參數(shù),線性模型。這樣必然引起一個(gè)問題,如果我想評價(jià)線性模型和非線性模型的性能,我不可能一個(gè)用liblinear一個(gè)用libsvm,如果兩個(gè)都用libsvm,報(bào)告的性能肯定有一些問題。
所以如果你的問題維度很大(線性模型就有非常好的性能),不妨考慮liblinear. “
大致看了一下libsvm和liblinear的說明文檔,發(fā)現(xiàn)一個(gè)問題就是在線性問題上兩者的目標(biāo)函數(shù)就不一樣,所以性能上的差異是正常的,應(yīng)該說如果優(yōu)化同一樣的目標(biāo)函數(shù)兩者性能應(yīng)該會(huì)差不多,但是速度很明顯,liblinear快很多。
對于什么時(shí)候用線性模型的問題,我想上面的我舉的例子用linear classifier就比較好,非線性分類不一定比線性分類器好,尤其是在樣本及其有限,同時(shí)特征維度很高的情況下,因?yàn)闃颖居邢薜那闆r下,kernel map通常不準(zhǔn)確,很有可能錯(cuò)誤地劃分類別空間,可能造成比線性模型更差的結(jié)果。
說到scale,我建議不要用libsvm里自帶的scale,因?yàn)橐坏┦褂眠@個(gè)工具,它就會(huì)把原來稀疏的數(shù)據(jù),變成非稀疏的格式,這樣不但會(huì)生成非常大的數(shù)據(jù)文件,而且liblinear對稀疏數(shù)據(jù)快速處理的優(yōu)勢就不能體現(xiàn)出來了。因此,要scale,就自己寫一個(gè),以保持原來稀疏的格式
liblinear的好處就是速度快,尤其是對稀疏的特征。缺點(diǎn)就是太吃內(nèi)存了。10G的數(shù)據(jù)量需要接近50G的內(nèi)存,數(shù)據(jù)量再大就沒法做了 。
另外,還有一個(gè)經(jīng)常提到的svm庫SVM-per: http://www.cs.cornell.edu/people/tj/svm_light/svm_perf.html 是康奈爾大學(xué)的人設(shè)計(jì)的。好像對計(jì)算機(jī)硬件的性能要求比liblinear要低...有做圖像處理的人使用這個(gè)svm-per代替liblinear。
另外,對于多分類問題以及核函數(shù)的選取,以下經(jīng)驗(yàn)規(guī)則可以借鑒:
對于多分類問題:
對于15類場景來說,每類100幅訓(xùn)練圖像,如果直接訓(xùn)練一個(gè)15類的multi-class classifier,則訓(xùn)練文件的Label值取1~15,wi標(biāo)記不用指定(default 1)。如果對于每個(gè)類單獨(dú)訓(xùn)練一個(gè)分類器,這樣就把這個(gè)類的100幅圖像作為正樣本(假設(shè)Label=1),而其余所有的訓(xùn)練圖像作為負(fù)樣本(共1400幅,假設(shè)Label=-1),由此可以看出正負(fù)樣本不平
原文地址: http://blog.sina.com.cn/s/blog_5b29caf7010127vh.html
liblinear VS libSVM
何時(shí)使用線性核而非RBF核
■ 樣本數(shù)遠(yuǎn)小于特征數(shù)
例如生物學(xué)數(shù)據(jù),70多個(gè)樣本,7000多個(gè)特征
■ 樣本數(shù)和特征數(shù)都很大
例如文本分類,2萬多樣本,4萬多特征
■ 樣本數(shù)遠(yuǎn)大于特征數(shù)
該情況作者并非推薦使用線性核,只是用來對比LibLinear和LibSVM的計(jì)算速度
文章來源: http://blog.sina.com.cn/s/blog_5b29caf701015ra0.html
LibShortText 是一個(gè)開源的Python短文本(包括標(biāo)題、短信、問題、句子等)分類工具包。它在 LibLinear 的基礎(chǔ)上針對短文本進(jìn)一步優(yōu)化,主要特性有:
下載
并在解壓后的目錄下make就OK了。
注意:不支持Windows系統(tǒng);Mac OS和Linux之間的庫不通用
關(guān)于LibShortText的性能,我們可以拿scikit-learn的樸素貝葉斯(參見 用scikit-learn實(shí)現(xiàn)樸素貝葉斯分類器 )和SVM(也是基于LibLinear)就前文提到的網(wǎng)頁標(biāo)題分類問題進(jìn)行橫向?qū)Ρ龋?
分類器 | 準(zhǔn)確率 | 計(jì)算時(shí)間(秒) |
---|---|---|
scikit-learn(nb) | 76.8% | 134 |
scikit-learn(svm) | 76.9% | 121 |
libshorttext | 79.6% | 49 |
測試環(huán)境為低配版MBA2013
顯然LibShortText無論在準(zhǔn)確率和效率上都要更勝一籌。
雖然LibShortText提供了訓(xùn)練和測試的類命令行操作方式,但直接從Python腳本調(diào)用更加靈活和強(qiáng)大,了解和訓(xùn)練、預(yù)測和分析相關(guān)的API是有幫助的。
預(yù)處理
Converter模塊負(fù)責(zé)將文本轉(zhuǎn)化為數(shù)值化的數(shù)據(jù)集(數(shù)據(jù)格式與LibSVM相同),由于內(nèi)置的分詞器僅支持英文,如果要用于中文短文本的分類,就必須替換分詞器(如下代碼所示)。分詞器是一個(gè)將文本轉(zhuǎn)化為單詞列表的函數(shù),值得注意的是:分詞器不會(huì)和模型一起保存,當(dāng)重載模型時(shí)也必須重載分詞器。
訓(xùn)練文本的格式如下:
娛樂\t組圖:劉亦菲短裙秀腿 濃妝變冷艷時(shí)髦女
模型
LibShortText提供兩組參數(shù)供訓(xùn)練時(shí)使用:
預(yù)測
獲得模型后,我們可以預(yù)測新文本的類別,LibShortText提供了兩個(gè)API:
類別預(yù)測將返回一個(gè)PredictResult的對象,包含下列屬性:
分析
analyzer的作用是分析LibShortText的預(yù)測結(jié)果,通過它我們可以了解哪些特征更為關(guān)鍵、哪些類別容易被混淆。
比如分析一條體育新聞的標(biāo)題:
終端輸出如下:
sports | news | game | food | porn | |
---|---|---|---|---|---|
…… | |||||
國 青 | 4.600e-01 | -1.349e-01 | -4.283e-03 | 0.000e+00 | 0.000e+00 |
…… | |||||
decval | 1.192e+00 | 3.396e-01 | 3.132e-01 | 2.196e-01 | 1.910e-01 |
可見「國」和「青」一起促成最關(guān)鍵的sports類特征。
又比如,選擇被誤分的樣本,調(diào)用gen_confusion_table()輸出sports、star和movie的混淆表格,以了解哪些類別的特征界限比較模糊。
終端輸出如下(第一行表示預(yù)測類別,第一列表示真實(shí)類別):
star | movie | sports | |
---|---|---|---|
star | 0 | 19 | 5 |
movie | 21 | 0 | 1 |
sports | 15 | 4 | 0 |
完整demo請見 lst_classifier.py 。
文章來源: http://guoze.me/2014/09/25/libshorttext-introduction/
聯(lián)系客服