tft每日頭條

 > 職場

 > 決策樹算法原理及實現

決策樹算法原理及實現

職場 更新时间:2024-10-04 20:51:20

  點擊上方關注,All in AI中國

  作者:Emma Grimaldi

  決策樹算法原理及實現(一種像人腦工作的算法)(1)

  決策樹是機器學習中最常用的算法之一,主要用于分類,也用于回歸問題。在我們做出決定之前我們都會問自己一些問題,而這時候我們的大腦就會像決策樹一樣工作。例如:外面是陰天嗎?如果是的話,我需要帶一把雨傘。

  在訓練數據集以對變量進行分類時,決策樹的思想就是基于特定的特征值将數據拆分為較小的數據集,直到目标變量全部屬于一個類别。人腦決定基于經驗(即多雲的天空)選擇"拆分特征",而計算機基于最大信息增益拆分數據集。讓我們定義一個簡單的問題,并跳轉到一些計算中,看看這意味着什麼。

  決策樹算法原理及實現(一種像人腦工作的算法)(2)

  貓和狗的數據集

  假設我們基于體重和身高想要建立一個決策樹來确定寵物是貓還是狗。我們可以根據兩個特征之一的某些值來劃分這些數據點,例如:對于大于15磅重量的寵物,确信是狗。至少基于這個非常簡單的數據集。但是如果重量小于15磅,我的子集将包含兩隻貓和一隻狗,所以我需要再次拆分子集,直到隻剩下一個類。換句話說,直到所有的子集都變得純粹。我實際上為這些數據值繪制了一個決策樹,得出以下這張示例圖:

  決策樹算法原理及實現(一種像人腦工作的算法)(3)

  決策樹示例

  每個決策樹都以根節點開始,即第一次拆分。在不考慮太多的情況下,我們可以輕松地提出不同類型的根節點,以便在相同數量的步驟中将數據分成一個解決方案。但是計算機如何決定如何定義節點?當然,它會尋找最有效的方式,為了理解這是什麼,我們需要引入基尼(Gini)這個系數,這是最常用的不等式度量。該不等式是指節點後的每個子集中的目标類。因此,可以在每次拆分後計算,并且根據節點之後不等式的變化,我們也可以定義"信息增益"。

  決策樹算法原理及實現(一種像人腦工作的算法)(4)

  基尼的定義

  為了計算基尼,我們考慮在節點之後找到每個類的概率,我們将這些值的平方求和,然後從1中減去這個數量。因此,當一個子集是純粹的(即其中隻有一個類)時候,基尼系數将為0,因為找到該等級的概率确實是1。在這種情況下,我們說已經達到了一個目标,因為在我們實現目标時不再需要拆分。但是如果我們看一下上面的圖片,在False情況下的根節點之後,我們有一個包含3個觀察的子集,其中2個是貓,1個是狗。如果我們想要計算該子集的基尼系數,我們得出:

  決策樹算法原理及實現(一種像人腦工作的算法)(5)

  所得出的數據集的基尼系數,重量大于或等于15磅

  可用于計算類不等式的另一個度量标準是熵(Entopy),而不是基尼(Gini)。它們具有相同的目的,但熵的變化幅度略有不同;但是,為此我們隻會使用基尼(Gini)。

  根據我們選擇的拆分策略,我們将為每個子集提供不同的基尼(Gini)值,并且根據節點後的Gins值,我們可以定義信息增益:

  決策樹算法原理及實現(一種像人腦工作的算法)(6)

  信息增益的定義

  這被定義為父基尼系數與子基尼系數的加權平均數之間的差值。如果我們參考上面的例子,通過簡單地應用定義知道初始數據集的基尼系數等于0.48,我們可以計算根節點之後的信息增益(以15磅的重量值拆分):

  決策樹算法原理及實現(一種像人腦工作的算法)(7)

  根節點後的信息增益

  然後,決策樹将考慮所有可能的拆分,并選擇具有最高信息增益的拆分。事實上,我們進行了一些編碼,看看Python的決策樹是什麼!

  根節點後的信息增益

  通過運行下面的代碼,我們從頭開始構建數據框,并僅在幾行中拟合模型。

  注意:在訓練模型之前訓練/測試拆分是很好的做法,以防止過度拟合,并且還要仔細檢查這種模型對看不見的數據的執行情況。在這種情況下,我們跳過了這一步驟,因為數據幀隻包含少量觀察。

  決策樹算法原理及實現(一種像人腦工作的算法)(8)

  需要指出的是,在實例化DecisionTreeClassifier時,我沒有在括号中指定任何參數。在處理非常大的數據集時,為了防止決策樹失去控制和過度拟合,查看max_depth以指定決策樹的最大劃分數量是非常有用的。此外,設置max_features非常有用,max_features是一個限制在搜索最佳拆分時要查看的預測變量數量的參數。此外,如果你希望決策樹基于熵而不是基尼(Gini進)行優化,則隻需在實例化對象時編寫criterion ='entropy'。如果要進一步探索如何調整模型,請參閱決策樹文檔。(http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html)

  太好了,我們建立了我們的模型!但這到底意味着什麼呢?決策樹的美妙之處在于它易于解釋,所以讓我們繪制它!為了運行下面的代碼片段,你可能需要首先在電腦上運行!pip install pydotplus pydot2

  決策樹算法原理及實現(一種像人腦工作的算法)(9)

  這段代碼的輸出将是下圖。

  決策樹算法原理及實現(一種像人腦工作的算法)(10)

  這很酷,對嗎?在上面的"手工制作"決策樹中,我選擇了15磅的重量作為根節點,算法決定拆分相同的變量,但是值為12。這就創造了一個隻有狗的葉節點(體重大于12,事實上,gini = 0))。從根節點之後的True條件生成的子集已經在值8.5上的高度變量上進一步拆分。最後一次拆分生成了兩個帶有空gini值的純子集。

  那麼,為什麼我們應該還是不應該使用決策樹?以下是其優缺點的簡要列表:

  (1)優點

  其解釋清晰,特别是如果我們需要将發現傳達給非技術受衆它可以很好地處理嘈雜或不完整的數據它可用于回歸和分類問題 (2)缺點

  它可能不穩定,這意味着數據的微小變化可能會導緻模型發生重大變化它傾向于過度拟合,這意味着低偏差但是方差很大:即使訓練數據得分很高,也可能對于看不見的數據表現不佳 幸運的是,還有許多技術可以處理過度拟合,這是決策樹的主要缺點。通過使用bagging 或​​增強方法,我們可以從決策樹概念開始,通過使用RandomForestClassifier或AdaBoostClassifier等模型來提出更準确的分析。這些都是集成(ensamble)方法,但随機森林通過boostrapping生成了許多"新數據集"(即用替換品對原始數據幀進行采樣);它适用于每個新數據幀的決策樹,并通過平均森林中的所有決策樹來預測。相反,Ada Boost是一個自适應樹,它通過調整不正确的分類實例同時使用相同的數據幀來自我學習。

  決策樹算法原理及實現(一種像人腦工作的算法)(11)

  ,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关職場资讯推荐

热门職場资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved