《機(jī)器學(xué)習(xí)》第四章課后習(xí)題-- 用Python實(shí)現(xiàn)決策樹

看完書后鹊汛,我參考了機(jī)器學(xué)習(xí)實(shí)戰(zhàn)里面的一些函數(shù),自己用Python實(shí)現(xiàn)了決策樹算芯。我在實(shí)現(xiàn)過程中并沒有很好地利用好數(shù)據(jù)結(jié)構(gòu)中樹的概念,代碼還有很多需要改進(jìn)的地方凳宙。接下來我就簡單總結(jié)下我的代碼實(shí)現(xiàn)熙揍。

代碼整體的算法參考課本的74-80頁。我是先實(shí)現(xiàn)基于信息熵進(jìn)行劃分選擇的決策樹算法氏涩,先完整生成一棵決策樹届囚,再逐步修改代碼,實(shí)現(xiàn)預(yù)剪枝等是尖。

數(shù)據(jù)集如下:


數(shù)據(jù)集

假設(shè)訓(xùn)練集為D意系,屬性集為A,決策的實(shí)現(xiàn)在于從屬性集A中挑選出最優(yōu)屬性a饺汹,根據(jù)屬性a劃分?jǐn)?shù)據(jù)集蛔添,然后再繼續(xù)在劃分好的數(shù)據(jù)集中繼續(xù)尋找最優(yōu)屬性,多次迭代兜辞,生成一棵樹迎瞧。迭代的終止條件為:(1)當(dāng)前數(shù)據(jù)集同屬一類別,例如劃分好的數(shù)據(jù)集全為好瓜(2)當(dāng)前屬性集A為空逸吵,或者數(shù)據(jù)集在所有屬性上的取值相同(3)當(dāng)前數(shù)據(jù)集為空

決策算法的關(guān)鍵在于如何選擇最優(yōu)屬性(包括如何選擇最優(yōu)屬性(基于信息熵凶硅,基于基尼指數(shù)等)進(jìn)行劃分,是否進(jìn)行劃分(預(yù)剪枝扫皱,后剪枝等))

下面用基于信息熵的算法實(shí)現(xiàn)決策樹:

1.對數(shù)據(jù)進(jìn)行讀取

數(shù)據(jù)文件名為waterMelonData.txt,編碼格式為utf-8足绅,用全局變量dataset存儲所有數(shù)據(jù),continusAttr存儲連續(xù)屬性名集? ? 合韩脑,attrAll存儲數(shù)據(jù)的第一行


數(shù)據(jù)讀取

2.計(jì)算信息熵:

計(jì)算信息熵:要統(tǒng)計(jì)數(shù)據(jù)dataset里的類別氢妈,用resultDict存儲類別(好瓜,壞瓜)段多,再計(jì)算各類別的概率允懂,最后算出信息熵

計(jì)算信息熵

3.計(jì)算信息增益

屬性為不連續(xù)屬性時(shí):

計(jì)算信息增益

函數(shù):

getAxis(attrChoose,attrAll)

attrChoose表示屬性,通過getAxis函數(shù)獲得數(shù)據(jù)文件的第幾列數(shù)據(jù)表示屬性attrChoose的描述衩匣,例如

attrChoose = “色澤”

得到axis = 1

splitDataSet(dataset,axis,key)

根據(jù)屬性的位置axis蕾总,找出屬性值為key的所有數(shù)據(jù)


getAxis函數(shù)




splitDataset函數(shù)

連續(xù)性屬性:

a.要先對該屬性的所有取值排序

b.計(jì)算候選劃分點(diǎn)集合

c.分別計(jì)算候選劃分點(diǎn)的信息增益

d.得到最大信息增益粥航,得到最優(yōu)劃分點(diǎn)

連續(xù)性屬性的信息增益計(jì)算

連續(xù)屬性的數(shù)據(jù)只需要根據(jù)最優(yōu)劃分點(diǎn),劃分為兩部分(data_small,data_large)即可


數(shù)據(jù)劃分

到這里已經(jīng)能分別算出每個(gè)屬性的信息增益了递雀,接下來就是遍歷未被使用過的屬性缀程,選出信息增益最大的屬性,進(jìn)行數(shù)? ? ? ? ? ? 據(jù)劃分

4.根據(jù)最優(yōu)屬性劃分



5.最后一步撩满,整合所有函數(shù)伺帘,迭代生成樹



生成樹1


生成樹2?

補(bǔ)充:countAttrKey(dataset,attr,axis)函數(shù)


countAttrKey函數(shù)


6.運(yùn)行結(jié)果:

運(yùn)行結(jié)果我只截取了部分



下面是根據(jù)運(yùn)行結(jié)果手動畫的樹:




整棵生成樹

7.代碼修改张咳,實(shí)現(xiàn)預(yù)剪枝晶伦,后剪枝等總結(jié)

a.個(gè)人覺得整體代碼處于較混亂狀態(tài)婚陪,在修改為預(yù)剪枝的時(shí)候频祝,總覺得部分函數(shù)有重合,或者是函數(shù)的劃分不太合理沽一。

b.書本中是將數(shù)據(jù)集認(rèn)為劃分為訓(xùn)練集和測試集,未思考如何劃分訓(xùn)練集合測試集

c.尷尬的是铣缠,在每個(gè)生成結(jié)點(diǎn)后,并沒有將每個(gè)結(jié)點(diǎn)存儲蝇庭,以致于在后剪枝時(shí)出現(xiàn)了一定的問題∽尘拢考慮用樹的思想喷屋,修改代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狱庇,一起剝皮案震驚了整個(gè)濱河市僵井,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌社搅,老刑警劉巖形葬,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猖腕,居然都是意外死亡倘感,警方通過查閱死者的電腦和手機(jī)老玛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桨吊,你說我怎么就攤上這事洛搀∮拥恚” “怎么了谎砾?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵景图,是天一觀的道長挚币。 經(jīng)常有香客問我妆毕,道長笛粘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任序六,我火速辦了婚禮例诀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘繁涂。我一直安慰自己扔罪,他們只是感情好矿酵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布敞咧。 她就那樣靜靜地躺著休建,像睡著了一般测砂。 火紅的嫁衣襯著肌膚如雪砌些。 梳的紋絲不亂的頭發(fā)上胧华,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音释漆,去河邊找鬼示姿。 笑死栈戳,一個(gè)胖子當(dāng)著我的面吹牛镊掖,可吹牛的內(nèi)容都是我干的亩进。 我是一名探鬼主播归薛,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼崇猫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涕烧,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞻凤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞻坝,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衙荐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溜族。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劣像。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耳奕,死狀恐怖屋群,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情降狠,我是刑警寧澤榜配,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布临燃,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏钥勋。R本人自食惡果不足惜辆苔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一荐吵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巧涧,春花似錦谤绳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豪硅。三九已至挺物,卻和暖如春识藤,著一層夾襖步出監(jiān)牢的瞬間稽穆,已是汗流浹背舌镶。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留否灾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓墨技,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扣汪。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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

  • 決策樹理論在決策樹理論中脐嫂,有這樣一句話紊遵,“用較少的東西,照樣可以做很好的事情暗膜。越是小的決策樹,越優(yōu)于大的決策樹”学搜。...
    制杖灶灶閱讀 5,851評論 0 25
  • 積跬步以致千里,積怠惰以致深淵 注:本篇文章在整理時(shí)主要參考了 周志華 的《機(jī)器學(xué)習(xí)》。 主要內(nèi)容 決策樹是機(jī)器學(xué)...
    指尖上的魔術(shù)師閱讀 1,394評論 0 5
  • (圖片來源網(wǎng)絡(luò)) 1. 章節(jié)主要內(nèi)容 決策樹是機(jī)器學(xué)習(xí)的一類常見算法瑞佩,其核心思想是通過構(gòu)建一個(gè)樹狀模型來對新樣本進(jìn)...
    閃電隨筆閱讀 5,253評論 3 14
  • 轉(zhuǎn)自算法雜貨鋪--決策樹決策樹和隨機(jī)森林學(xué)習(xí)筆記-歡迎補(bǔ)充 http://www.cnblogs.com/fion...
    明翼閱讀 10,742評論 1 6
  • 今天看到一句話:你才25歲炬丸,你可以成為你想成為的任何人,與大家分享一下.。 從一個(gè)工科生的角度來剖析這句話褒纲,25歲...
    bac8130bc63b閱讀 352評論 0 0