決策樹(shù)python實(shí)現(xiàn)

參考書籍:機(jī)器學(xué)習(xí)--周志華 / 數(shù)據(jù)挖掘?qū)д?/ 統(tǒng)計(jì)學(xué)習(xí)方法

參考代碼鏈接:https://blog.csdn.net/weixin_40683253/article/details/81941583#commentsedit

博主還非常nice地給我發(fā)了數(shù)據(jù)集,感謝!

1. 概念

決策樹(shù)是基于樹(shù)結(jié)構(gòu)來(lái)進(jìn)行決策的。根結(jié)點(diǎn)包含樣本全集,葉結(jié)點(diǎn)對(duì)應(yīng)于決策結(jié)果。其他的每個(gè)結(jié)點(diǎn)對(duì)應(yīng)于一個(gè)屬性測(cè)試,每個(gè)結(jié)點(diǎn)包含的樣本集合根據(jù)屬性測(cè)試的結(jié)果被劃分到子節(jié)點(diǎn)中。

屬性:{色澤,根蒂,敲聲,紋理,臍部,觸感}

屬性值: eg:色澤={青綠,烏黑,淺白}

2. 最優(yōu)劃分屬性選擇算法

信息熵(information entropy):D的信息熵:Ent(D) = - \sum_{k=1}^n p_{k} \log_2 p_{k}

p_{k} 為當(dāng)前樣本集合D中第k類樣本所占的比例。

Ent(D)的值越小,則D的純度越高。

ID3算法:以信息增益(information gain)為準(zhǔn)則來(lái)選擇劃分屬性。

屬性a對(duì)樣本集D進(jìn)行劃分所獲得的信息增益:Gain(D, a) = Ent(D) - \sum_{v=1}^V\frac{\vert D^v  \vert }{D}  Ent(D^v)

D^v 表示D中所有在屬性a上取值為a^v 的樣本。

信息增益越大,使用屬性a來(lái)進(jìn)行劃分所獲得的純度提升越大。選取信息增益最大的屬性作為劃分屬性。

C4.5算法:以增益率則來(lái)選擇最優(yōu)劃分屬性(先從候選劃分屬性中找出信息增益高于平均水平的屬性,再?gòu)闹羞x擇增益率最高的)

增益率:Gainratio(D, a) = \frac{Gain(D, a)}{IV(a)}

IV(a) = -\sum_{v=1}^V\frac{\vert D^v  \vert }{\vert D \vert }\log_2 \frac{|D^v| }{\vert D \vert }

CART算法:以基尼指數(shù)(來(lái)選擇劃分屬性。

基尼值:Gain(D) = 1-\sum_{k=1}^np_{k}^2

Gini index =(D, a) = \sum_{v=1}^V\frac{|D^v| }{|D|}  Gini(D^v)

3. python實(shí)現(xiàn)


1. 需要用到的工具import


2. 主函數(shù)


3. 數(shù)據(jù)處理并導(dǎo)入


4. 建立決策樹(shù)


5. 如果每條數(shù)據(jù)只包含分類結(jié)果,則選擇分類結(jié)果count最大的輸出,這是一種特殊情況


6. 利用信息增益最大的原則選擇劃分屬性


7. step6中計(jì)算信息增益的時(shí)候需要用到的信息熵


8. 在step6中計(jì)算信息增益需要用到的函數(shù)。

完整代碼:







最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容