機器學習——決策樹算法分析

? ? 歡迎關注微信公眾號:AI Engine

?? ?之前寫過一篇文章是關于決策樹實例的,對于急于上手的同學應該會有一定的幫助,這次對決策樹算法原理會做一個較為詳細的說明分析,可能會比較枯燥,俗稱“看不動”。但是對于想要更深一步了解的同學,本篇文章對您或許所有幫助。

? ? 決策樹是人工智能算法中較為常見的一種,該算法可以應用的場景以及典型案例也很多。比如對商品購買能力的預測、對天氣情況的預測、以及在醫學中的應用等等。很多博客中經常會舉相親的例子作為介紹決策樹介紹的敲門磚,不好意思我也一樣。我們來看一個場景:

?? ?時間: 早上九點

?? ?地點: 家里。?

?? ?“閨女,我給你找了個合適的對象,今天要不要見一面?”

?? ?“多大?”

?? ?“26歲?!?? ?? ———————————————————>年齡條件

?? ?“長得帥嗎?” ————————————————————>顏值條件

?? ?“還可以,不算太帥。”

?? ?“工資高么?”?———————————————————>收入條件

?? ?“略高于平均水平。”

?? ?“會寫代碼嗎?”———————————————————>特殊條件

?? ?“人家是程序員,代碼寫得棒著呢!”

?? ?“好,那把他聯系方式發來吧,我抽空見一面。” ========================>>>>>>>結論

?? ?這是一個普通的相親故事,但是在這個女孩和她母親的對話中無形的構造出了一個決策樹的模型:


????較為官方的概念:決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。每個非葉節點表示一個特征屬性上的測試集,每個分支代表這個特征屬性在某個值域上的輸出,而每個葉節點存放一個類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特征屬性,并按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作為決策結果。說實話我第一次看到這句話的時候確實也不知道到底說的是啥,但是例子是個好東西,上面的例子就是一個很好的說明。但是現在問題來了,在這個例子中女孩的所有劃分條件(年齡,顏值…)都是比較明確和具體的,可是如果我們在擁有數據的同時也許并不知道這些劃分條件。這些條件在機器學習中我們稱之為特征,特征的選取需要我們對數據敏感并利用特征工程等知識對其進行確定。特征確定之后我們就擁有了一個特征序列{fea1,fea2,fea3……}。問題又來了,在這個例子中女孩首先使用的特征是年齡,她為什么這么做?這樣做的優勢是什么?這引出我們應該思考的第一個小問題:決策樹的種類有哪些?每種的決策樹的核心啟發函數是什么?它們之間的區別和聯系又是什么?

????我先回答上面關于種類的問題,常用的決策樹分為3種:ID3決策樹、C4.5決策樹、CART決策樹。我們首先介紹ID3決策樹。?從信息論知識中我們知道,期望信息越小,信息增益越大,從而純度越高。所以ID3算法的核心思想就是以信息增益來度量屬性選擇,選擇分裂后信息增益最大的屬性進行分裂。那么我們如何計算信息增益呢?在計算信息增益前我們需要計算數據集的經驗熵和每個特征的經驗條件熵(我知道有部分同學可能到這里已經要放棄閱讀了,別著急,我保證讓大家能看動!)

????對于樣本集合D,類別數為K,數據集D的經驗熵表示為:


?? ?其中Ck是樣本集合D中屬于第k類的樣本子集,|Ck|表示該子集的元素個數,|D|表示樣本集合的元素個數。然后計算某個特征A對于數據集D的經驗條件熵H(D|A)為:


?? ?其中,Di表示D中特征A取第i個值的樣本子集,Dik表示Di中屬于第k類的樣本子集。計算完二者之后信息增益就可以得出結果了,即:經驗熵 - 經驗條件熵:


? ? 為了表示誠意,舉實例作為上述原理的解釋說明,特附上手稿一幅:


? ? 從這個例子中我們計算出了經驗熵和各自的經驗條件熵,最后很明顯’代碼’屬性的信息增益是最大,所有的樣本可以根據此特征直接被分到葉結點(即見或不見)中,從而完成決策樹生長。當然,在實際應用中決策樹往往不能通過一個特征就完成構建,需要在經驗熵非0的類別中繼續生長。上述的例子由于代碼屬性的信息增益最大,所以第一次分類就以代碼屬性進行劃分,之后就按照上述的計算方法迭代進行,從而構造一顆完整的決策樹。

????以上就是ID3算法大致的核心思想,下面介紹一下C4.5決策樹算法。如果說ID3算法依賴于信息增益,那C4.5就是依賴于信息增益比了,也可以說是ID3算法的優化。上述的例子中,不少朋友已經看出來既然’代碼’屬性這么NB,那就只按照這個屬性劃分正好也能得到預期的結果,何必還問工資年齡呢?沒錯,這可以說是ID3算法的劣勢之一:易產生過擬合。ID3算法還存在另外一個問題,就是偏向于多值屬性,例如,如果存在唯一標識屬性ID,則ID3會選擇它作為分裂屬性,這樣雖然使得劃分充分純凈,但這種劃分對分類幾乎毫無用處,而C4.5使用信息增益比試圖克服這個不足。

????特征A對于數據集D的信息增益比為:


其中:


?? ?結合我們之前的實例以及上述公式,我們計算每個特征的取值熵:


?? ?每個特征的取值熵均相同,那么我們可以得出結論’代碼’屬性的信息增益比仍然是所有屬性中最大的,依然是分類的最好依據!最后我們看看CART決策樹算法,該算法所依賴的是Gini系數,Gini系數所表示的是純度信息,與信息熵含義相似:


????CART在每一次迭代中選擇基尼指數最小的特征及其對應的切分點進行分類。 但與ID3、C4.5不同的是,CART是一顆二叉樹,采用二元切割法,每一步將數據按特征A的取值切成兩份,分別進入左右子樹。特征A的Gini指數定義為:


我們還是結合上述的實例計算一下:


????果然是’代碼’屬性的純度最高,Gini值最少,逆天特征。

?? ?同理而述,CART決策樹會選擇’代碼’屬性作為第一次分類的劃分依據,然后依次迭代上述的計算過程完成整個決策樹的生長,實現分類的效果。這就是常用決策樹的構建過程以及實現原理。三種算法有一定的區別:1.ID3以信息增益作為評定標準,信息增益是指給定條件后不確定性減少的程度,信息增益越大,確定性越高,熵值越小。但是在應用中模型的泛化能力弱,易產生過擬合。2.C4.5采取信息增益比,是對ID3的一種優化,提高了模型的泛化能力。3.ID3只能對離散型數值進行預測,而C4.5和CART可以對離散型和連續型數值均進行預測。但是從應用的角度來說,只有CART適合分類和回歸任務,ID3和C4.5只適合分類任務。4.ID3和C4.5可以在每個結點上產生出多叉分支,且每個特征在 層級之間不會復用,而CART每個結點只會產生兩個分支, 因此最后會形成一顆二叉樹,且每個特征可以被重復使用。5.ID3和C4.5通過剪枝來權衡樹的準確性與泛化能力,而CART直接利用全部數據發現所有可能的樹結構進行對比。

? ? 決策樹大致就是如此,是機器學習中比較常用也比較簡單有效的算法,但是有一定的缺陷。當然,所有的算法都是依賴于數據的質量的,相信大家一定會懂。后續的文章可能會介紹預剪枝和后剪枝的故事,希望大家多多關注小編,有哪里說的不好還請諸位多多指導批評,謝謝各位了。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容