AI演算法 1 決策樹

2022-04-20 15:53:01 字數 3680 閱讀 8033

今天,我們介紹的機器學習演算法叫決策樹。

跟之前一樣,介紹演算法之前先舉乙個案例,然後看一下如何用演算法去解決案例中的問題。

我把案例簡述一下:某公司開發了一款遊戲,並且得到了一些使用者的資料。如下所示:

圖上每個圖形表示乙個使用者,橫座標是年齡,縱座標是性別。紅色表示該使用者喜歡這款遊戲,藍色表示該使用者不喜歡這款遊戲。比如,右下角這個藍色方框,代表的是乙個五六十歲的女士。藍色表示她不喜歡這款遊戲。再比如,左上角的紅色三角形,代表的是乙個十來歲的男孩。紅色表示他喜歡這款遊戲。

現在有個新使用者,用綠色所示。這家公司想知道:這個新使用者會不會喜歡這款遊戲?

僅從圖上看,我們很難一眼就做出有效的判斷。我們不妨先把使用者的屬性梳理一下,然後對使用者進行歸類。按照性別和年齡兩個維度來分,可以製作出乙個這樣的**。我們把每乙個使用者都按條件放到相應的格仔裡,如圖所示:

小於30歲且性別為男的使用者都在第乙個格仔裡,總共有3個人,且全部喜歡玩遊戲;30以上的且性別為女的使用者都在右下角的格仔裡,總共有4個人,且都不玩這款遊戲。其他的人,有的喜歡玩遊戲,有的不喜歡。

我們可以再建立一顆樹,用於判斷這些人的偏好。比如,我們先用性別作判斷條件,把人分成「男」和「女」兩份。然後在每乙份裡面,再用年齡把他們再分成兩份。

圖中用橢圓形代表判斷條件,比如性別是什麼,是否小於30歲。箭頭是判斷結果,比如男在左側,女性在右側。小於30歲的在左側,大於30歲的在右側。

最底下是這棵樹的葉子節點,每乙個葉子節點就是乙個判斷結果。對於性別為男且小於30歲的使用者,判斷結果就在最左側那片葉子上。這個葉子節點對應的是**中第乙個格仔的資料。那裡100%的使用者都是紅色,所以,這用紅色的三角表示。數值為1.0,表示紅色使用者的佔比為100%,或者紅色使用者的概率為100%。

第二個葉子節點為藍方塊,它對應第二個格仔中的資料。符合這些條件的使用者,有80%的人是藍色。所以,這裡是藍色,且數值為0.8。

其它以此類推。紅色0.75表示75%的使用者是紅色,藍色1.0,表示100%的人藍色。

如果來了新的使用者,就把他的屬性往這棵樹上套,找到他所在的葉子節點,然後根據葉子節點的顏色和數字來判斷他的偏好。比如,乙個15歲的小夥子,我們看一下,他應該在這棵樹的哪個位置。因為是男性,所以在左半部分。有知道他是15歲,小於30歲,所以在他位於左下角的葉子。這個葉子為紅色,且數值等於1.0。即喜歡這款遊戲的概率為100%。於是,就判斷他非常可能喜歡這款遊戲。再比如,來了乙個25歲的女士。因為是女性,所以在又半個樹上。年齡25歲,小於30,所以會會定位在第三個葉子。這個葉子是紅色,且數值等於0.75。因此,我們判斷他喜歡這款遊戲的概率是75%,或者說她有可能喜歡這款遊戲。若是乙個45歲的女士,往樹上套,就會定位在第四個葉子,顏色為藍色,數值為1.0。因此,她不喜歡這款遊戲的概率為100%,或者說喜歡遊戲的概率為0。

這棵樹就是一顆決策樹。

我們同樣可以建立另一棵樹,把條件的順序顛倒一下,第一層是年齡,第二層是性別。

這兩棵樹的葉子都是一樣的,只是順序不一樣而已。所以用這兩棵樹的做判斷,結果是一樣的。不過,這兩棵樹不是等價的!

它們的不同之處在於,「性別」和「年齡」這兩個屬性的重要性不一樣!

重要性是什麼意思?

可以這麼想象一下:如果只讓你選擇乙個屬性,你選擇哪個屬性。或者說只允許選擇乙個屬性的時候,選哪個屬性會讓你的決策更準確一些?我們不妨實驗一下。

1. 假設我們只能用「性別」屬性。

我們用性別來判斷,發現男性使用者裡,有一半是紅色,一半是藍色。所以,我們無法判斷,男性使用者應該是紅色好還是藍色好。發現女性使用者裡,有3個紅色,有5個藍色。我們隱約可以做乙個判斷:「女性使用者不大喜歡玩這款遊戲」。但是,你做這個判斷的時候,會底氣不足,畢竟還有3個女性是喜歡玩的。

2. 假設我們只能用「年齡」這個屬性。

我們會發現,小於30歲的使用者總共有7個,其中有6個是紅色的,佔比85.7%。大於30歲的使用者總共有9個,其中有8個是藍色的,佔比89%。於是,我們可以大膽的判斷:「小於30歲的使用者更喜歡玩遊戲,大於30歲的使用者不喜歡玩。」你做這個判斷時,底氣十足,鏗鏘有力!

憑直覺,你就會覺得「年齡」這個屬性更重要!

沒錯,你的直覺是對的!

原因是,用了「性別」後,資料仍然混亂不清;而用了「年齡」這個屬性後,資料變得確定起來。

關於確定性或不確定性的程度,資訊理論裡用乙個叫做「熵」的詞來表示。「熵」這個詞原本是熱力學裡的乙個概念,用於表示熱力學系統的無序程度。熵越大表示越無序,熵越小表示越有序。2023年,香濃把它引入到資訊理論裡,並給出了資訊熵的計算公式。資訊熵越大,不確定性越大;熵越小,不確定性越小。這個被認為是20世紀最重要的貢獻之一!

上圖中,若資料中增加了「性別」屬性進行分類,使用者是那種顏色仍然不是很確定,所以熵值比較大。若資料中增加了「年齡」屬性進行分類,使用者的顏色基本就確定了,所以熵值就小。

因此:乙個屬性的重要性,可以用它所產生的熵值大小來判斷。使得熵值變的更小的屬性,重要性更高!

熵是有乙個精確的公式,具體就不在這裡寫了。有機會的話,我會在以後的高階課程裡講。

既然熵可以計算,那屬性的重要性就可以計算。我們把所有屬性產生熵計算一遍,從小到大排序,最小熵值對應的屬性就是最重要的。我們把最重要的屬性放到決策樹最上面的節點。

然後在每個分支上,計算剩餘屬性中最重要的屬性,放到二級節點。以此類推。

當我們有很多屬性的時候,放在最底下的屬性,其影響力可能微小到忽略不計,我們就可以不要它們,這樣決策樹的結構也就很精簡,只包含重要屬性。在有些情況下,這樣對枝葉的裁剪可以有效的避免過擬合。關於什麼叫「過擬合」,以後有機會再講,有興趣的同學也可以自己查一查。

對於上面的兩個樹,我們可以嘗試裁剪一下。如下圖所示。以年齡為根的樹,通過裁剪,仍然可以有很好的**準確率,因為右側被裁剪後,仍然有89%的**準確率,這個概率已經足夠高。而對以性別為根對樹進行裁剪,就會有些問題。因為右側葉子僅有62%的**準概率。可以看出來「年齡」做根更好一些。

下面是一段偽**,createbranch方法用於建立決策樹的分支,它是乙個遞迴的結構。

createbranch()

else

return

分支節點} }

參考原文連線: 

決策樹演算法

決策樹是一種樹型結構,其中每個內部結點表示在乙個屬性上的測試,每個分支代表乙個測試輸出,每個葉結點代表一種類別。決策樹學習是以例項為基礎的歸納學習,採用的是自頂向下的遞迴方法,其基本思想是以資訊熵為度量構造一棵熵值下降最快的樹,到葉子結點處的熵值為零,此時每個葉節點中的例項都屬於同一類。決策樹學習演...

決策樹演算法

本文主要介紹id3 c4.5和cart演算法 決策樹起源於概念學習系統 cls 概念學習模型 是乙個事先定義的範疇集合和一些有關例子是否落入給定範疇的判定 概念學習的主要任務 是判斷所給定事物的屬性或特性,並且正確地區分這些事物,將其劃分到某乙個範疇 對於如下決策樹模型 我們首先考慮他的屬性outl...

決策樹演算法

引 最近老師布置了課堂展示的作業,主題是決策樹,老師還舉了買西瓜的決策例子,感覺貼近生活也很有意思。在這之前沒有了解過這個概念,通過幾個禮拜的學習收穫不少。一 首先,什麼是決策樹?個人而言,決策樹就是將人在做決策時的思維脈絡以樹的形式展示出來的產物,即決策的過程模型。這是一棵去不去打高爾夫球的決策樹...