試想,8歲的小明是你剛上小學(xué)的兒子,長(zhǎng)得可愛(ài),古靈精怪,對(duì)世界充滿好奇。
這天飯后,剛寫完家庭作業(yè)的小明看到你在書桌前對(duì)著電腦眉頭緊鎖,便跑了過(guò)來(lái)問(wèn)你:“爸爸(媽媽),你在做什么呀?”。
身為算法工程師的你正為公司的一個(gè)分類項(xiàng)目忙得焦頭爛額,聽到小明的問(wèn)話,你隨口而出:“分類!”
“分類是什么?”
聽到兒子的追問(wèn),你的視線終于離開屏幕,但想說(shuō)的話還沒(méi)出口又咽了回去……
?
簡(jiǎn)單來(lái)說(shuō),分類就是對(duì)事物進(jìn)行區(qū)分的過(guò)程和方法。
在你眼里乖巧的小明是一個(gè)好孩子,同時(shí)你也想確保他會(huì)在學(xué)校做一名“好學(xué)生”而不是“壞學(xué)生”。這里的區(qū)分“好學(xué)生”和“壞學(xué)生”就是一個(gè)分類任務(wù),關(guān)于這點(diǎn),達(dá)觀研究院可以幫你回答小明的疑問(wèn)。
“別和其他壞學(xué)生在一起,否則你也會(huì)和他們一樣?!? ?
這句話通常來(lái)自家長(zhǎng)的勸誡,但它透露著不折不扣的近鄰思想。在分類算法中,K最近鄰是最普通也是最好理解的算法。它的主要思想是通過(guò)離待預(yù)測(cè)樣本最近的K個(gè)樣本的類別來(lái)判斷當(dāng)前樣本的類別。
家長(zhǎng)們希望孩子成為好學(xué)生,可能為此不惜重金購(gòu)買學(xué)區(qū)房或者上私立學(xué)校,一個(gè)原因之一是這些優(yōu)秀的學(xué)校里有更多的優(yōu)秀學(xué)生。與其他優(yōu)秀學(xué)生走的更近,從K最近鄰算法的角度來(lái)看,就是讓目標(biāo)樣本與其他正樣本距離更近、與其他負(fù)樣本距離更遠(yuǎn),從而使得其近鄰中的正樣本比例更高,更大概率被判斷成正樣本。
?
“根據(jù)以往抓獲的情況來(lái)看,十個(gè)壞學(xué)生有九個(gè)愛(ài)打架?!? ?
說(shuō)這句話的訓(xùn)導(dǎo)主任很有可能就是通過(guò)樸素貝葉斯算法來(lái)區(qū)分好、壞學(xué)生。
“十個(gè)壞學(xué)生有九個(gè)愛(ài)打架”就意味著“壞學(xué)生”打架的概率P(打架|壞學(xué)生)=0.9,假設(shè)根據(jù)訓(xùn)導(dǎo)處歷史記錄壞學(xué)生占學(xué)生總數(shù)P(壞學(xué)生)=0.1、打架發(fā)生的概率是P(打架)=0.09,那么這時(shí)如果發(fā)生打架事件,就可以通過(guò)貝葉斯公式判斷出當(dāng)事學(xué)生是“壞學(xué)生”的概率P(壞學(xué)生|打架)=P(打架|壞學(xué)生)×P(壞學(xué)生)÷P(打架)=1.0,即該學(xué)生100%是“壞學(xué)生”。
樸素貝葉斯算法成立的一個(gè)前提是滿足特征間條件獨(dú)立假設(shè)。假如教導(dǎo)主任還管學(xué)生早戀問(wèn)題,那么他通過(guò)“打架”和“早戀”兩種特征來(lái)判斷學(xué)生的前提必須是——在已知學(xué)生“好壞”的情況下“打架”和“早戀”之間沒(méi)有關(guān)聯(lián)。這樣的假設(shè)可能和實(shí)際情況不符合,但讓訓(xùn)導(dǎo)主任判斷起來(lái)更加簡(jiǎn)單粗暴。
“先看抽不抽煙,再看染不染頭發(fā),最后看講不講臟話。”?
社區(qū)大媽經(jīng)驗(yàn)豐富,有一套自己的判斷邏輯。假設(shè)“抽煙”、“染發(fā)”和“講臟話”是社區(qū)大媽認(rèn)為的區(qū)分“好壞”學(xué)生的三項(xiàng)關(guān)鍵特征,那么這樣一個(gè)有先后次序的判斷邏輯就構(gòu)成一個(gè)決策樹模型。在決策樹中,最能區(qū)分類別的特征將作為最先判斷的條件,然后依次向下判斷各個(gè)次優(yōu)特征。決策樹的核心就在于如何選取每個(gè)節(jié)點(diǎn)的最優(yōu)判斷條件,也即特征選擇的過(guò)程。
而在每一個(gè)判斷節(jié)點(diǎn),決策樹都會(huì)遵循一套IF-THEN的規(guī)則:
?
IF “抽煙” THEN -> “壞學(xué)生”
ELSE
? ? ? ? IF “染發(fā)” THEN -> “壞學(xué)生”
? ? ? ? ELSE IF “講臟話” THEN -> “壞學(xué)生”
? ? ? ? ? ? ? ? ? ? ? ?ELSE -> “好學(xué)生”
“上課講話扣1分,不交作業(yè)扣2分,比賽得獎(jiǎng)加5分?!? ?
班上的紀(jì)律委員既勤懇又嚴(yán)格,總是在小本本上記錄同學(xué)們的每一項(xiàng)行為得分。在完成對(duì)每一項(xiàng)行為的評(píng)分后,紀(jì)律委員根據(jù)最終加總得到的總分來(lái)判斷每位同學(xué)的表現(xiàn)好壞。
?
上述的過(guò)程就非常類似于邏輯回歸的算法原理。我們稱邏輯回歸為一種線性分類器,其特征就在于自變量x和因變量y之間存在類似y=ax+b的一階的、線性的關(guān)系。假設(shè)“上課講話”、“不交作業(yè)”和“比賽得獎(jiǎng)”的次數(shù)分別表示為x1、x2、和x3,且每個(gè)學(xué)生的基礎(chǔ)分為0,那么最終得分y=-1*x1-2*x2+5*x3+0。其中-1、-2和5分別就對(duì)應(yīng)于每種行為在“表現(xiàn)好”這一類別下的權(quán)重。
Sigmoid函數(shù)圖像
?
對(duì)于最終得分y,邏輯回歸還通過(guò)Sigmoid函數(shù)將其變換到0-1之間,其含義可以認(rèn)為是當(dāng)前樣本屬于正樣本的概率,即得分y越高,屬于“表現(xiàn)好”的概率就越大。也就是說(shuō),假如紀(jì)律委員記錄了某位同學(xué)分別“上課講話”、“不交作業(yè)”和“比賽得獎(jiǎng)”各一次,那么最終得分y=-2-1+5=2,而對(duì)2進(jìn)行Sigmoid變換后約等于0.88,即可知該同學(xué)有88%的概率為“好學(xué)生”。
“我想個(gè)辦法把表現(xiàn)差的學(xué)生都調(diào)到最后一排?!??
即使學(xué)生們?cè)俨磺樵?,班主任也有一萬(wàn)個(gè)理由對(duì)他們的座位作出安排。對(duì)于“壞學(xué)生”,一些班主任的采取的做法是盡量讓他們與“好學(xué)生”保持距離,即將“壞學(xué)生”們都調(diào)到教室的最后一排。這樣一來(lái),就相當(dāng)于在學(xué)生們之間畫了一條清晰的分割界線,一眼就能區(qū)分出來(lái)。
支持向量機(jī)的思想就是如此。支持向量機(jī)致力于在正負(fù)樣本的邊界上找到一條分割界線(超平面),使得它能完全區(qū)分兩類樣本的同時(shí),保證劃分出的間隔盡量的大。如果一條分割界線無(wú)法完全區(qū)分(線性不可分),要么加上松弛變量進(jìn)行適當(dāng)?shù)娜萑蹋赐ㄟ^(guò)核函數(shù)對(duì)樣本進(jìn)行空間上的映射后再進(jìn)行劃分。對(duì)于班主任來(lái)講,調(diào)換學(xué)生們的座位就相當(dāng)于使用了核函數(shù),讓原本散落在教室里的“好”、“壞”學(xué)生從線性不可分變得線性可分了。
?
分類和分類算法的思想其實(shí)無(wú)處不在。而在實(shí)際工程中,分類算法的應(yīng)用需要關(guān)注的地方還有很多。達(dá)觀數(shù)據(jù)在中文文本分類方面擁有豐富的實(shí)踐經(jīng)驗(yàn)和心得。想了解這方面的內(nèi)容,敬請(qǐng)期待下一篇文章《中文文本分類——你需要了解的10項(xiàng)關(guān)鍵內(nèi)容》。