機(jī)器學(xué)習(xí)入門(mén)(十二):決策樹(shù)——告訴你 Hello Kitty 是人是貓

Hello Kitty 的種族問(wèn)題

Hello Kitty蝶怔,一只以無(wú)嘴造型40年來(lái)風(fēng)靡全球的萌萌貓奶浦,在其40歲生日時(shí),居然被其形象擁有者宣稱(chēng):Hello Kitty 不是貓踢星!

2014年8月澳叉,研究 Hello Kitty 多年的人類(lèi)學(xué)家 Christine R. Yano 在寫(xiě)展品解說(shuō)時(shí),卻被 Hello Kitty 持有商三麗鷗糾正:Hello Kitty 是一個(gè)卡通人物,她是一個(gè)小女孩成洗,是一位朋友五督,但她“絕不”是一只貓。

enter image description here

粉了快半個(gè)世紀(jì)的世界萌貓瓶殃,你說(shuō)是人就是人啦充包?!就算是形象持有者遥椿,也沒(méi)權(quán)利下這個(gè)定論啊!

誰(shuí)有權(quán)認(rèn)定 Hello Kitty 是人是貓呢基矮?我們把裁決權(quán)交給世界上最公正無(wú)私的裁判—— 計(jì)算機(jī)。讓機(jī)器來(lái)決定冠场。

機(jī)器如何具備區(qū)分一個(gè)形象屬于哪個(gè)物種的知識(shí)呢愈捅?讓它學(xué)習(xí)呀!機(jī)器是可以學(xué)習(xí)的慈鸠。我們用計(jì)算機(jī)編個(gè)程序蓝谨,再輸入一堆數(shù)據(jù),等著這個(gè)程序運(yùn)行一個(gè)算法來(lái)處理這些數(shù)據(jù)青团。最后譬巫,我們需要的結(jié)論就顯示在屏幕上啦。就是這么簡(jiǎn)單督笆!

那么來(lái)看看我們需要的數(shù)據(jù)和算法吧芦昔。

訓(xùn)練數(shù)據(jù)

如下圖所示,左邊一堆是一群小女孩娃肿,右邊一堆是一群貓咕缎。

enter image description here

特征選取

我們提取七個(gè)特征,用來(lái)判斷一個(gè)形象料扰,是人是貓凭豪。這七個(gè)特征包括:有否蝴蝶結(jié);是否穿衣服晒杈;是否高過(guò)5個(gè)蘋(píng)果嫂伞;是否有胡子;是否圓臉拯钻;是否有貓耳朵帖努;是否兩腳走路。

用一個(gè)表格來(lái)表現(xiàn)這七個(gè)特征則粪般,如下圖所示(第一列為 Label拼余,第2至8列為7個(gè)特征,每個(gè)特征只有兩個(gè)取值亩歹,Yes 或者 No):

enter image description here

<center style="font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none; box-sizing: border-box; caret-color: rgb(63, 63, 63); color: rgb(63, 63, 63); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei"; outline: 0px !important;">Table-1</center>

用 ID3 算法構(gòu)造分類(lèi)樹(shù)

本例中匙监,我們選用最簡(jiǎn)單的 ID3 算法寡润,代入數(shù)據(jù)進(jìn)行計(jì)算。

(1)根據(jù)信息熵的概念舅柜,我們先來(lái)計(jì)算 Entropy(S)。因?yàn)榭偣仓挥袃蓚€(gè)類(lèi)別:人和貓躲惰,因此 n==2致份。

Entropy(S)=?∑ni=1pilog(pi)=?pGirllog(pGirl)?pCatlog(pCat)=?9/17?log(9/17)?8/17?log(8/17)=0.69

(2)然后我們?cè)俜謩e計(jì)算各個(gè)特征的:

Entropy(S|T)=∑value(T)|Sv||S|Entropy(Sv)

因?yàn)闊o(wú)論哪個(gè)特征,都只有兩個(gè)特征值:Yes 或者 No础拨,因此 value(T) 總共只有兩個(gè)取值氮块。

下面以“Has a bow”為例來(lái)示意其計(jì)算過(guò)程。

Entropy(S|HasABow)=pYes(?p(Girl|Yes)log(p(Girl|Yes))–p(Cat|Yes)log(p(Cat|Yes)))+pNo(?p(Girl|No)log(p(Girl|No))–p(Cat|No)log(p(Cat|No)))=8/17?(?4/8?log(4/8)–4/8?log(4/8))+9/17?(?5/9?log(5/9)–4/9?log(4/9))=0.69

InformationGain(T)=Entropy(S)?∑value(T)|Sv||S|Entropy(Sv)

依次計(jì)算其他幾項(xiàng)诡宗,得出如下結(jié)果:

(3)進(jìn)一步計(jì)算滔蝉,得出 InfoGain(Has cat ears) 最大,因此“Has cat ears”是第一個(gè)分裂節(jié)點(diǎn)塔沃。

而從這一特征對(duì)應(yīng)的類(lèi)別也可以看出蝠引,所有特征值為 No 的都一定是 Girl;特征值為 Yes蛀柴,可能是 Girl 也可能是 Cat螃概,那么第一次分裂,我們得出如下結(jié)果:

enter image description here

現(xiàn)在“Has cat ears”已經(jīng)成為了分裂點(diǎn)鸽疾,則下一步將其排除吊洼,用剩下的6個(gè) Feature 繼續(xù)分裂成樹(shù):

enter image description here

<center style="font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none; box-sizing: border-box; caret-color: rgb(63, 63, 63); color: rgb(63, 63, 63); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei"; outline: 0px !important;">Table-2</center>

Table-2 為第二次分裂所使用的訓(xùn)練數(shù)據(jù),相對(duì)于 Table-1制肮,“Has cat ears”列冒窍,和前7行對(duì)應(yīng)“Has cat ears”為 No 的數(shù)據(jù)都已經(jīng)被移除,剩下部分用于第二次分裂豺鼻。

如此反復(fù)迭代综液,最后使得7個(gè)特征都成為分裂點(diǎn)。

需要注意的是儒飒,如果某個(gè)特征被選為當(dāng)前輪的分裂點(diǎn)意乓,但是它在現(xiàn)存數(shù)據(jù)中只有一個(gè)值,另一個(gè)值對(duì)應(yīng)的記錄為空约素,則這個(gè)時(shí)候針對(duì)不存在的特征值届良,將它標(biāo)記為該特征在所有訓(xùn)練數(shù)據(jù)中所占比例最大的類(lèi)型。

對(duì)本例而言圣猎,當(dāng)我們將“Wear Clothes”作為分裂點(diǎn)時(shí)士葫,會(huì)發(fā)現(xiàn)該特征只剩下了一個(gè)選項(xiàng)——Yes(如下 Table-3 所示)。此時(shí)怎么給“Wear Clothes”為 No 的分支做標(biāo)記呢送悔?

enter image description here

<center style="font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none; box-sizing: border-box; caret-color: rgb(63, 63, 63); color: rgb(63, 63, 63); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei"; outline: 0px !important;">Table-3</center>

這時(shí)就要看在 Table-1 中慢显,“Wear Clothes”為 No 的記錄中是 Girl 多還是 Cat 多爪模。一目了然,在 Table-1 中這兩種記錄數(shù)量為 0:6,因此“Wear Clothes”為 No 的分支直接標(biāo)志成 Cat。

根據(jù)上述方法制恍,最終我們構(gòu)建出了如下決策樹(shù):

enter image description here

決策樹(shù)構(gòu)建過(guò)程记焊,如下代碼所示:

后剪枝優(yōu)化決策樹(shù)

決策樹(shù)剪枝

剪枝是優(yōu)化決策樹(shù)的常用手段。剪枝方法大致可以分為兩類(lèi):

  1. 先剪枝(局部剪枝):在構(gòu)造過(guò)程中,當(dāng)某個(gè)節(jié)點(diǎn)滿(mǎn)足剪枝條件,則直接停止此分支的構(gòu)造;
  2. 后剪枝(全局剪枝):先構(gòu)造完成完整的決策樹(shù)除嘹,再通過(guò)某些條件遍歷樹(shù)進(jìn)行剪枝。

后剪枝優(yōu)化 Hello Kitty 樹(shù)

現(xiàn)在岸蜗,決策樹(shù)已經(jīng)構(gòu)造完成尉咕,所以我們采用后剪枝法,對(duì)上面決策樹(shù)進(jìn)行修剪璃岳。

如圖中顯示年缎,最后兩個(gè)分裂點(diǎn)“Has round face”和“Has a bow”存在并無(wú)意義——想想也是啊,無(wú)論人貓铃慷,都有可能是圓臉晦款,也都可以戴蝴蝶結(jié)啊。

所以我們遍歷所有節(jié)點(diǎn)枚冗,將沒(méi)有區(qū)分作用的節(jié)點(diǎn)刪除缓溅。完成后,我們的決策樹(shù)變成了下面這樣:

enter image description here

用決策樹(shù)對(duì) Hello Kitty 進(jìn)行分類(lèi)

我們將 Hello Kitty 的特征帶入 Cat-Girl 決策樹(shù)赁温,發(fā)現(xiàn) Hello Kitty:Has cat ears: Yes -> Walk on 2 feet: Yes -> Wear Clothes: Yes -> Has whiskers: Yes -> Less than 5 apples: Yes -> Cat坛怪。

Bingo! Hello Kitty 是只貓!這是我們的 ID3 決策樹(shù)告訴我們的股囊!

代碼實(shí)現(xiàn)

下面的代碼就是用 numpy 和 sklearn 來(lái)實(shí)現(xiàn)例子中的訓(xùn)練分類(lèi)樹(shù)來(lái)判斷 Hello Kitty 種族所對(duì)應(yīng)的程序袜匿。

最后輸出為:

[1 1 0 0]

0.75

[0]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市稚疹,隨后出現(xiàn)的幾起案子居灯,更是在濱河造成了極大的恐慌,老刑警劉巖内狗,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怪嫌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡柳沙,警方通過(guò)查閱死者的電腦和手機(jī)岩灭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赂鲤,“玉大人噪径,你說(shuō)我怎么就攤上這事柱恤。” “怎么了找爱?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵梗顺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我车摄,道長(zhǎng)寺谤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任练般,我火速辦了婚禮,結(jié)果婚禮上锈候,老公的妹妹穿的比我還像新娘薄料。我一直安慰自己,他們只是感情好泵琳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布摄职。 她就那樣靜靜地躺著,像睡著了一般获列。 火紅的嫁衣襯著肌膚如雪谷市。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天击孩,我揣著相機(jī)與錄音迫悠,去河邊找鬼。 笑死巩梢,一個(gè)胖子當(dāng)著我的面吹牛创泄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播括蝠,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鞠抑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了忌警?” 一聲冷哼從身側(cè)響起搁拙,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎法绵,沒(méi)想到半個(gè)月后箕速,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朋譬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年弧满,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片此熬。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庭呜,死狀恐怖滑进,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情募谎,我是刑警寧澤扶关,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站数冬,受9級(jí)特大地震影響节槐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拐纱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一铜异、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秸架,春花似錦揍庄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缭黔,卻和暖如春食茎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馏谨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工别渔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惧互。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓钠糊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親壹哺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抄伍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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