機器學習讀書筆記(三)決策樹基礎篇之從相親說起

2022-09-12 03:36:14 字數 3017 閱讀 1351

一、決策樹

決策樹是什麼?決策樹(decision tree)是一種基本的分類與回歸方法。舉個通俗易懂的例子,如下圖所示的流程圖就是乙個決策樹,長方形代表判斷模組(decision block),橢圓形成代表終止模組(terminating block),表示已經得出結論,可以終止執行。從判斷模組引出的左右箭頭稱作為分支(branch),它可以達到另乙個判斷模組或者終止模組。我們還可以這樣理解,分類決策樹模型是一種描述對例項進行分類的樹形結構。決策樹由結點(node)和有向邊(directed edge)組成。結點有兩種型別:內部結點(internal node)和葉結點(leaf node)。內部結點表示乙個特徵或屬性,葉結點表示乙個類。矇圈沒??如下圖所示的決策樹,長方形和橢圓形都是結點。長方形的結點屬於內部結點,橢圓形的結點屬於葉結點,從結點引出的左右箭頭就是有向邊。而最上面的結點就是決策樹的根結點(root node)。這樣,結點說法就與模組說法對應上了,理解就好。

我們回到這個流程圖,對,你沒看錯,這就是乙個假想的相親物件分類系統。它首先檢測相親對方是否有房。如果有房,則對於這個相親物件可以考慮進一步接觸。如果沒有房,則觀察相親物件是否有上進心,如果沒有,直接say goodbye,此時可以說:」你人很好,但是我們不合適。」如果有,則可以把這個相親物件列入候選名單,好聽點叫候選名單,有點瑕疵地講,那就是備胎。

不過這只是個簡單的相親物件分類系統,只是做了簡單的分類。真實情況可能要複雜得多,考慮因素也可以是五花八門。脾氣好嗎?會做飯嗎?願意做家務嗎?家裡幾個孩子?父母是幹什麼的?

我們可以把決策樹看成乙個if-then規則的集合,將決策樹轉換成if-then規則的過程是這樣的:由決策樹的根結點(root node)到葉結點(leaf node)的每一條路徑構建一條規則;路徑上內部結點的特徵對應著規則的條件,而葉結點的類對應著規則的結論。決策樹的路徑或其對應的if-then規則集合具有乙個重要的性質:互斥並且完備。這就是說,每乙個例項都被一條路徑或一條規則所覆蓋,而且只被一條路徑或一條規則所覆蓋。這裡所覆蓋是指例項的特徵與路徑上的特徵一致或例項滿足規則的條件。

二、決策樹構建的準備工作

決策樹要如何構建呢?通常,這一過程可以概括為3個步驟:特徵選擇、決策樹的生成和決策樹的修剪。

2.1 特徵選擇

特徵選擇在於選取對訓練資料具有分類能力的特徵。這樣可以提高決策樹學習的效率,如果利用乙個特徵進行分類的結果與隨機分類的結果沒有很大差別,則稱這個特徵是沒有分類能力的。經驗上扔掉這樣的特徵對決策樹學習的精度影響不大。通常特徵選擇的標準是資訊增益(information gain)或資訊增益比

2.1.1 夏農熵

集合資訊的度量方式成為夏農熵或者簡稱為熵(entropy),這個名字**於資訊理論之父克勞德·夏農。

熵定義為資訊的期望值。在資訊理論與概率統計中,熵是表示隨機變數不確定性的度量。如果待分類的事務可能劃分在多個分類之中,則符號xi的資訊定義為

其中p(xi)是選擇該分類的概率。

通過上式,我們可以得到所有類別的資訊。為了計算熵,我們需要計算所有類別所有可能值包含的資訊期望值(數學期望),通過下面的公式得到:

期中n是分類的數目。熵越大,隨機變數的不確定性就越大。

2.1.2 編寫**計算熵

我們已經學會了通過公式計算熵,接下來編寫**,計算熵

1

#coding=utf-8

2from math import

log345

#資料集建立

6def

createdataset():

7 dataset =[

8 [1, 1, '

yes'], [1, 1, '

yes'], [1, 0, '

no'], [0, 1, '

no'], [0, 1, 'no'

]9]10 labels = ['

no su***cing

', '

flippers']

11return

dataset, labels

121314#

計算給定數集的夏農熵

15def

calcshannonent(data_set):

16 numentries =len(data_set)

17 labelcounts ={}

18for featvec in

data_set:

19 currentlabel = featvec[-1]

20if currentlabel not

in labelcounts.keys(): labelcounts[currentlabel] =0

21 labelcounts[currentlabel] += 1

22 shannonent = 0.0

23for key in

labelcounts:

24 prob = float(labelcounts[key]) /numentries

25 shannonent -= prob * log(prob, 2)

26return

shannonent

2728

29 mydata, labels =createdataset()

30print

(mydata)

31print

(calcshannonent(mydata))

3233 mydata[0][-1] = '

maybe'34

print

(mydata)

35print(calcshannonent(mydata))

機器學習讀書筆記 決策樹

決策樹是一類常見的機器學習方法。舉個簡單的例子,我們分辨乙個藝術品是否具有藝術價值,可以從色彩,線條兩方面去評價 不會美術,只是打個比方 例如下面這幅畫,我們可以先判斷色彩不鮮豔,再判斷線條不美觀,從而得出這沒有藝術價值。這判斷的過程就是一棵決策樹。如圖 這是決策樹學習基本演算法 可以看出,關鍵在第...

機器學習實戰讀書筆記 決策樹

以下是需要的一些子函式 計算給定資料集的夏農熵 defcalcshannonent dataset numentries len dataset 得到行數 labexcounts for featvec in dataset currentlabel featvec 1 獲取每行最後一列的值 根據最...

機器學習筆記 三 決策樹

學習機器學習演算法之決策樹,這個大俠的文章寫得不錯 總結一下 1.對於資訊熵的理解 選假設有乙個離散型隨機變數x有4中可能的結果 a 1 2,b 1 4,c 1 8,d 1 8,後面的是每種結果的發生概率。那麼如果順序的去猜測x,就會有以下事件可能發生 問到a,命中a,用一次,問a b,命中b,用兩...