本篇內(nèi)容介紹了“怎么用Python構(gòu)造決策樹”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司10多年企業(yè)網(wǎng)站建設(shè)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站建設(shè)及推廣,對玻璃鋼雕塑等多個行業(yè)擁有多年的網(wǎng)站維護(hù)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
起步
本章介紹如何不利用第三方庫,僅用python自帶的標(biāo)準(zhǔn)庫來構(gòu)造一個決策樹。
熵的計算公式:
對應(yīng)的 python 代碼:
條件熵的計算
根據(jù)計算方法:
對應(yīng)的 python 代碼:
其中參數(shù) future_list 是某一特征向量組成的列表,result_list 是 label 列表。
信息增益
根據(jù)信息增益的計算方法:
對應(yīng)的python代碼:
..
定義決策樹的節(jié)點(diǎn)
作為樹的節(jié)點(diǎn),要有左子樹和右子樹是必不可少的,除此之外還需要其他信息:
樹的節(jié)點(diǎn)會有兩種狀態(tài),葉子節(jié)點(diǎn)中 results 屬性將保持當(dāng)前的分類結(jié)果。非葉子節(jié)點(diǎn)中, col 保存著該節(jié)點(diǎn)計算的特征索引,根據(jù)這個索引來創(chuàng)建左右子樹。
has_calc_index 屬性表示在到達(dá)此節(jié)點(diǎn)時,已經(jīng)計算過的特征索引。特征索引的數(shù)據(jù)集上表現(xiàn)是列的形式,如數(shù)據(jù)集(不包含結(jié)果集):
有三條數(shù)據(jù),三個特征,那么***個特征對應(yīng)了***列 [1, 0, 0] ,它的索引是 0 。
遞歸的停止條件
本章將構(gòu)造出完整的決策樹,所以遞歸的停止條件是所有待分析的訓(xùn)練集都屬于同一類:
從訓(xùn)練集中篩選***的特征
因此計算節(jié)點(diǎn)就是調(diào)用 best_index = choose_best_future(node.data_set, node.labels, node.has_calc_index) 來獲取***的信息增益的特征索引。
構(gòu)造決策樹
決策樹中需要一個屬性來指向樹的根節(jié)點(diǎn),以及特征數(shù)量。不需要保存訓(xùn)練集和結(jié)果集,因?yàn)檫@部分信息是保存在樹的節(jié)點(diǎn)中的。
創(chuàng)建決策樹
這里需要遞歸來創(chuàng)建決策樹:
根據(jù)信息增益的特征索引將訓(xùn)練集再劃分為左右兩個子樹。
訓(xùn)練函數(shù)
也就是要有一個 fit 函數(shù):
清理訓(xùn)練集
訓(xùn)練后,樹節(jié)點(diǎn)中數(shù)據(jù)集和結(jié)果集等就沒必要的,該模型只要 col 和 result 就可以了:
預(yù)測函數(shù)
提供一個預(yù)測函數(shù):
測試
數(shù)據(jù)集使用前面《應(yīng)用篇》中的向量化的訓(xùn)練集:
“怎么用Python構(gòu)造決策樹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!