《機器學習實戰》學習筆記三 決策樹

2021-08-20 02:24:26 字數 1374 閱讀 7260

第三章:決策樹

決策樹就是乙個樹狀結構的判別模式:這棵樹的每個非葉節點都包含乙個判斷條件,每個葉節點都是一種特定的分出來的類別。

缺點:可能產生匹配過度

關於優缺點,個人理解:對中間值的缺失不敏感就是說可以處理有缺失值的特徵資料,匹配過度應該是對於分出來的類別中存在父子類這種情況來說的

一、決策樹總體過程

文字描述:不斷地對正在處理的資料集進行劃分,找出最佳的特徵及其特徵的具體閾值進行劃分(如何判斷最佳:可以有自己的評判標準,書中給出的是用資訊熵來確定是否分類最佳),直到當前處理的資料集都屬於乙個類別(注:資料的類別已知)

偽**:        

createtree(dataset):

if (資料集中資料為同一分類)

返回類標籤

else

尋找最佳劃分特徵

根據最佳劃分特徵劃分資料集

對每個劃分的子集

建立節點

呼叫此函式並將結果新增到樹中

返回當前節點

二、程式設計過程中的關鍵問題

1. 最佳特徵判別標準:使用資訊理論度量資訊

在劃分資料集之前之後資訊發生的變化稱為資訊增益,而計算資訊增益需要知道集合資訊的度量方式,即夏農熵(簡稱熵):

資訊的定義:   

l(x) = -log(p(x))
熵的定義:所有類別所有可能值包含的資訊期望值(期望:p(x)*l(x) ):

h = sum(p(xi)*l(xi))
理解:(想看詳細的:資訊增益)熵,通俗點說就是「不確定性」,當你的選擇很少,少到極限就是只有乙個選擇(沒有選擇),此時不確定性為0,此時熵最小亦為0;當你的各個選擇的概率相同時,你最不確定,此時熵最大為1 。

因此,只需要在每次劃分前後比對熵的大小,熵減少最大的那種劃分方案即為當前的最佳劃分方案

注意:劃分前還好,就乙個當前資料集,乙個集合直接按公式計算即可;劃分後需要按『sum(劃分後的集合的熵 * 劃分集係數)』來計算,劃分集係數等於劃分後的集合長度占原資料集長度的比值

2. 樹的構建過程: 使用python字典資料結構

creattree(dataset):

bestlabel = 最佳劃分特徵對應的標籤名

tree = }

for each value in bestfeature.values():

tree[bestlabel][value] = createtree(subdataset)

return tree

在遞迴的過程中以字典的方式實現了決策樹的構建,在此還是不推薦大家直接去type書上的**,自己動手實踐一下,熟悉這種程式設計的思路對自己更加有益(至少對筆者是這樣)

《機器學習實戰》學習筆記三 決策樹

1.資訊增益 決策樹應該是比較簡單的概念了,其結構類似於二叉樹,從根節點向下依次判斷,直至葉子節點獲得結果。對於基本結構不多說了,這裡主要說一下和決策樹相關的兩個數學上的概念,即資訊增益和夏農熵。資訊增益是指的以某乙個特徵對資料集劃分前後資料集發生的變化,而夏農熵則是度量這一變化的量。夏農熵的計算公...

機器學習實戰 決策樹(三)

構造決策樹之後,將用於實際資料的分類。執行資料分類時需要使用決策樹以及用於構造決策樹的標籤向量。如下 該函式的inputtree是已經生成的決策樹,是字典集,featlabels是要測試的資料特徵的列表,testvec是與featlabels的特徵列表中對應的特徵值,注意位置需要對應。輸入形式如 c...

機器學習實戰筆記之三(決策樹)

決策樹,資料形式易於理解。k 近鄰演算法,完成很多分類任務。缺點 可能會產生過度匹配問題。適用資料型別 數值型和標稱型。收集資料 可以使用任何方法。準備資料 樹構造演算法只適用於標稱型資料,因此數值型資料必須離散化。分析資料 可以使用任何方法,構造樹完成之後,我們應該檢查圖形是否符合預期。訓練演算法...