機器學習:談談決策樹

0 回顧

前面談了邏輯迴歸的基本原理及梯度下降推導過程,編碼實現了邏輯迴歸的梯度下降算法,這是分類算法。今天,我們繼續開啓分類算法之旅,它是一種高效簡介的分類算法,後面有一個集成算法正是基於它之上,它是一個可視化效果很好的算法,這個算法就是決策樹。

1 一個例子

有一堆水果,其中有香蕉,蘋果,杏這三類,現在要對它們分類,可以選擇的特徵有兩個:形狀和大小,其中形狀的取值有個:圓形和不規則形,大小的取值有:相對大和相對小。現在要對其做分類,我們可以這樣做:
首先根據特徵:形狀,如果不是圓形,那麼一定是香蕉,這個就是葉子節點;
如果是圓形,
再進一步根據大小這個特徵判斷,如果是相對大的,則是蘋果,如果否,則是杏子,至此我們又得到兩個葉子節點,並且到此分類位置,都得到了正確劃分三種水果的方法。


這裏寫圖片描述

大家可以體會剛纔這個過程,這就是一個決策分類,構建樹的一個過程,說成是樹,顯得有點高大上,再仔細想想就是一些列 if 和 else 的嵌套,說是樹只不過是邏輯上的一種神似罷了。

剛纔舉的這個例子,有兩個特徵:形狀和大小,並且選擇了第一個特徵:形狀作爲第一個分裂點,大小作爲第二個分裂點,那麼不能選擇第二個特徵作爲第一分裂點嗎? 這樣選擇有沒有公式依據呢?

2 分裂點選擇依據

在上個例子中,有三類水果,現在假設杏都被我們家的寶寶喫完了,現在手裏只有香蕉和蘋果這兩類水果了,並且這個時候要對它們做分類,此時機靈的你,一定會根據特徵:形狀對它們分類了,因爲這樣一下就會把它們分開了,此時我們說這類集合的純度更高,與之前的那三類水果在形狀這個特徵上。

純度這個概念是很好的理解的,種類越少純度越高,自然兩類純度更高。 此時有人提出了一個和它相反的但是不那麼容易理解的概念:熵。它們是敵對雙方:熵越大,純度越低;熵越小,純度越高。

這是一種概念,那麼如何用公式量化熵呢:

這裏寫圖片描述

其中 i 等於蘋果,香蕉,杏,P(i)是集合中取得某一個水果的概率。

試想一下,如果我們想更好地對某個集合完成分類,會怎麼做呢?我們一定會優先選擇一個特徵,使得以這個特徵做分類時,它們能最大程度的降低熵,提高分類的純度,極限的情況是集合中100個元素(集合中只有兩類水果),根據某個最優特徵,直接將分爲兩類,一類都是蘋果,一類都是杏,這樣熵直接等於0。

這個特點就是所謂的信息增益,熵降低的越多,信息增益的就越多。很多時候都不會發生上述說的這個極限情況,就像文章一開始舉的例子,根據形狀劃分後,熵變小了,但是未等於0,比如剛開始三類水果的熵等於0.69,現在根據形狀分裂後,熵等於了0.4,所以信息增益爲0.69 - 0.4 = 0.29 。如果根據大小劃分,信息增益爲0.1,那麼我們回考慮第一個分裂特徵:形狀。

這種方法有問題嗎?

3 信息增益越大,分類效果越好?

這是隻根據信息增益選擇分裂特徵點的bug,請看下面舉例。

如果某個特徵是水果的唯一標示屬性:編號,那麼此時如果選擇這個特徵,共得到100個葉子節點(假設這堆水果一共有100個),每個葉子節點只含有1個樣本,並且此時的信息增益最大爲 0.69 - 0 = 0.69 。

但是,這是好的分類嗎? 每一個樣本作爲單獨的葉子節點,當來了101號水果,都不知道劃分到哪一個葉子節點,也就不知道它屬於哪一類了!

因此,這個問題感覺需要除以某個變量,來消除這種情況的存在。

它就是信息增益率,它不光考慮選擇了某個分裂點後能獲得的信息增益,同時還要除以分裂出來的這些節點的熵值,什麼意思呢? 剛纔不是分裂出來100個節點嗎,那麼這些節點自身熵一共等於多少呢:

這裏寫圖片描述

再除以上面這個數後,往往信息增益率就不會那麼大了。這就是傳說中的從ID3 到 C4.5 的改進。

4 與熵的概念類似的基尼係數

只需要知道基尼係數和熵差不多的概念就行了,只不過量化的公式不同而已,這就說明理解了,至於公式長什麼樣子,用的時候去查就行了。

讓我們看一下遠邊的大海,和海邊優美的風景,放鬆一下吧!

5 展望

以上介紹了決策樹的一些概念和分裂點選取的基本方法。明天打算藉助sklearn庫的API,可視化出建立決策樹的過程,以及分析決策樹中不可或缺的最重要的部分:剪枝策略。

決策樹在訓練集上分類效果可以達到100%,那麼在測試集上爲什麼分類效果不夠好?

測試集上,分類效果不夠好,應該怎麼做呢?

剪枝的方法都有哪些?剪枝主要考慮哪些影響因素或指標?

歡迎關注《算法channel》

交流思想,注重分析,看重過程,包含但不限於:經典算法,機器學習,深度學習,LeetCode 題解,Kaggle 實戰,英語沙龍,定期邀請專家發推。期待您的到來!
這裏寫代碼片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章