機器學習爬大樹之決策樹(CART與剪枝)
分類與迴歸樹(classification and regression tree,CART)是應用廣泛的決策樹學習方法,同樣由特徵選擇,樹的生成以及剪枝組成,既可以用於分類也可以用於迴歸。CART假設假設決策樹是二叉樹,內部結點特徵的取值為“是”或‘否’,左分支是取值為‘是’的分支,右分支是取值為“否”的分支,例如有個特徵為‘年齡’,它的特徵值為{‘年齡’:[‘小孩’,‘成年’,‘老人’]};那麼左分支為去{‘年齡’ = ‘小孩’}的情況下為{{‘小孩’},{‘成年’,‘老人’}};這樣的決策樹等價於遞迴地二分每個特徵,將輸入空間即特徵空間劃分為有限個單元,並在這些單元上確定預測的概率分佈,也就是在輸入給定的條件下輸出的條件概率分佈!
CART演算法有以下兩步組成:
i)決策樹的生成:基於訓練資料集生成決策樹,生成的決策樹要儘量大:而在遞迴地構建二叉決策樹時,對生成迴歸樹用平方誤差最小化準則,對分類樹用基尼指數(Gini index)最小化準則,進行特徵選擇,生成二叉樹。
ii)決策樹剪枝:用驗證資料集對已生成的樹進行剪枝並選擇最優子樹,這時用損失函式最小作為剪枝的標準。
一、CART之迴歸樹
一個迴歸樹對應著輸入空間(即特徵空間)的一個劃分以及在劃分的單元上的輸出值;當輸入空間的劃分確定時,可以用平方誤差在表示迴歸樹對於訓練資料 的預測誤差,用平方誤差最小的準則求解每個單元上的最優輸出值。
問題是怎樣對輸入空間進行劃分呢?、這裡採用啟發式的方法,這裡我們假設有個特徵,每個特徵都有取值,那麼我們遍歷所有的特徵,嘗試該特徵下的所有取值,直到我們取得了最小的特徵的特徵值,使得損失函式最小,這樣就得到一個劃分點,即:
接著,對每個區域重複上述劃分過程, 假設 將輸入空間劃分為M個單元,則每個劃分空間的輸出值為
直到滿足停止條件為止,這樣就生成一顆迴歸樹。這樣的迴歸樹通常稱為最小二乘迴歸樹(least squares regression tree)
具體演算法步驟參考李航(統計學習方法):
為了便於理解,我們以一個簡單的例子來生成一個迴歸樹(最小二乘迴歸樹):
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
4.50 | 4.75 | 4.91 | 5.34 | 5.80 | 7.05 | 7.90 | 8.23 | 8.70 | 9.00 |
首先我們的劃分點集合為:
1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
來尋找最優劃分點(因為我們的例子只有一個特徵,所以無需考慮)
當s=1.5時,,,由劃分後的輸入空間的輸出值公式:
得
同理得到如下表:
1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 | |
4.50 | 4.62 | 4.72 | 4.87 | 5.06 | 5.39 | 5.75 | 6.06 | 6.35 | |
6.85 | 7.11 | 7.43 | 7.78 | 8.17 | 8.45 | 8.64 | 8.85 | 9.0 |
將, ,帶入公式
得
1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 | |
22.64 | 17.70 | 12.19 | 7.38 | 3.36 | 5.07 | 10.05 | 15.18 | 21.33 |
由上表可以很清楚的知道當s=5.5時,損失函式最小,故將訓練集劃分為:
, ; ,;
那麼此時的迴歸樹可以表示為:
然後分別對,重複上面的步驟:
當劃分時,有
1 | 2 | 3 | 4 | 5 | |
|
4.50 | 4.75 | 4.91 | 5.34 | 5.80 |
此時的劃分點為:
1.5 | 2.5 | 3.5 | 4.5 |
同理計算每個劃分下的,然後找到最小的劃分點作為最後的劃分點,如下表:
1.5 | 2.5 | 3.5 | 4.5 | |
4.50 | 4.63 | 4.72 | 4.88 | |
5.20 | 5.35 | 5.57 | 5.80 |
將, ,帶入公式 ,得到下表:
1.5 | 2.5 | 3.5 | 4.5 | |
0.67 | 0.43 | 0.191 | 0.37 |
因此最小劃分點為時,故將 ,分為, 其輸出值; ,其 輸出值 .
當劃分時,有
6 | 7 | 8 | 9 | 10 | |
7.05 | 7.90 | 8.23 | 8.70 | 9.00 |
此時的劃分點為:
6.5 | 7.5 | 8.5 | 9.5 |
同理計算每個劃分下的,然後找到最小的劃分點作為最後的劃分點,如下表:
6.5 | 7.5 | 8.5 | 9.5 | |
7.05 | 7.48 | 7.73 | 7.97 | |
8.46 | 8.64 | 8.85 | 9.0 |
將, ,帶入公式 ,得到下表:
6.5 | 7.5 | 8.5 | 9.5 | |
0.72 | 0.66 | 0.79 | 1.45 |
因此最小劃分點為時,故將 ,分為, 其輸出值; ,其 輸出值 .
我們的終止條件是最小損失函式小於某個閾值,或者是規定樹的深度,亦或者是樣本個數小於預定閾值
所以假設我們規定樹的深度為3,那麼以上劃分將終止,最後的迴歸樹為:
在GBDT中無論是迴歸還是分類問題,都是使用CART迴歸樹,那麼如何用CART的迴歸樹解決CBDT的分類,我將在後續的部落格中論述。
二、CART之分類樹
CART決策樹使用“基尼指數”(Gini index)來選擇劃分特徵,其定義如下:
給定一個樣本集合,假設有個類,第類的樣本集合為,其概率為,則樣本集合的基尼指數定義為:
直觀來說,反映了從資料集中隨機抽取兩個樣本,其類別標記不一致的概率。因此,越小,則資料集的純度越高。
如果樣本集合根據特徵是否取某一可能屬性值被分割成和兩部分,即:
,
則在特徵的條件下,集合的基尼指數定義為:
基尼指數表示的不確定性,基尼指數表示經分割後集合的不確定性。基尼指數值越大,樣本集合的不確定性也就越大,這一點與熵相似。
演算法停止計算的條件一般為:
(1)結點中的樣本個數小於預定的閾值;
(2)樣本集的基尼指數小於預定閾值(樣本基本屬於同一類)
(3)沒有更多特徵
由於這邊的知識點較為簡單,並且例子很多,比如李航的書就有,所以就不再舉例說明了!
三、決策樹的剪枝
剪枝(pruning)是決策樹學習演算法對付“過擬合”的主要手段。在決策樹學習中,為了儘可能正確分類訓練樣本,結點劃分過程將不斷重複,有時會造成決策樹分支過多,這時就可能因訓練樣本學得“太好了”,以致於把訓練集自身的一些特點當做所有資料都具有的一般性質而導致過擬合。因此,可通過主動去掉一些分支來降低過擬合的風險。
當前存在許多種不同的剪枝方法,分為預剪枝(preprunning)和後剪枝(postpruning),後者應用較為廣泛,後剪枝又可以分為兩類,一類是把訓練資料集分為樹生成集與樹剪枝集,一類是在樹的生長與剪枝過程中都使用同一訓練資料集,預剪枝的缺點是使樹的生長可能過早停止,因此應用較少,因此我們主要講講後剪枝的知識點。
1、ID3與C4.5的剪枝
決策樹的剪枝往往通過極小化決策樹整體的損失函式(loss function)或代價函式(cost function)來實現。設樹的葉節點的個數為,是樹的葉節點,該葉節點有個樣本點,其中類的樣本點有個,,為葉結點上的經驗熵,為引數,則決策樹學習的損失函式為:
其中經驗熵為:
既然損失函式這麼定義(雖然我也不知道是怎麼來的),我們就好好分析一下這個函式,我們不難發現,決定損失函式的只與葉結點有關,而跟內部節點一點關係都沒有,在損失函式中,若有如下定義:
這時有:
表示模型對訓練資料的預測誤差,即模型與訓練資料的擬合程度;
表示模型複雜度;
我的理解是相當於領回歸中的正則化引數,首先我們想要最小化的損失函式,那麼當很小的時候,對的懲罰也就很小,因此就會很大,這樣得到的決策樹因為葉結點多所以較為複雜,當時,整棵樹就是最好的;同理當很大的時候,對的懲罰也就很大,因此就會很小,這樣得到的決策樹因為葉結點少所以較為簡單。
剪枝就是當確定時,選擇損失函式最小的模型;因此我們可以這麼理解,表示剪枝前的樹,表示剪枝後的樹,看下錶:
剪枝前損失函式 | |
剪枝後損失函式 |
如果剪枝前的損失函式大於剪枝後的損失函式(我們想要損失函式越小越好)即,那麼一定要剪枝的啊,好處多多,比如說剪枝後損失函式小;剪枝後因為少了個葉子結點所以樹的模型也變得簡單,因此演算法如下:
其實這種剪枝方法類似於REP(reduced error pruning)方法,它需要一個分離資料集用於剪枝,對於決策樹的每顆非葉子樹,用葉結點代替這顆子樹。如果被葉結點替代後形成的新樹關於的誤差等於或者小於關於所產生的誤差,則用葉子結點替代!
我們以下圖為例說明REP的剪枝過程,圖(a)為剪枝資料集,圖(b)和圖(c)顯示的是基於REP的方法:
我們看圖(b)中根結點,表示這個結點分類為時的誤差為3,即括號裡的數是分類誤差;在遍歷樹過程中,採用自底向上的方式,該方式可以保證剪枝後的結果是關於剪枝資料集的具有最小誤差的最小剪枝樹。
我們以圖(b)為例,結點有兩個葉子結點(),那麼結點到底需不需要剪枝呢 ?我們看下剪枝前與剪枝後的誤差的大小關係來決定:
剪枝前:的誤差之和為1 剪枝後:(作為葉子結點被剪掉)作為葉子結點誤差為0
所以我們決定剪枝(之前2個葉子結點,現在變成了一個,使模型邊的簡單)得到圖(c),餘下的過程類似。
2.CART剪枝
CART剪枝演算法從“完全生長”的決策樹的底端剪去一些子樹,使決策樹變小(模型變簡單),從而能夠對未知資料有更準確的預測常用CCP(cost-complexity pruning)。
CART剪枝演算法由兩步組成:
(1):從生成演算法產生的決策樹底端開始不斷剪枝,直到的根結點,形成一個子樹序列;
(2):然後通過交叉驗證法在獨立的驗證資料集上對子樹序列進行測試,從中選擇最優子樹。
在步驟(1)中,生成子樹序列的基本思想是從開始,裁剪中關於訓練資料集誤差增加最小的分枝來得到,實際上,當一棵樹在結點處剪枝時,它的誤差增加直觀上認為是,其中,為在結點的子樹被裁剪後的結點的誤差(其實就是內部結點t經過裁剪後變成葉子結點t),為在結點的子樹沒被裁剪時的子樹誤差;然而,剪枝後,的葉子數減少了,其中,為子樹的葉結點數,也就是說,的複雜性減少了因此,考慮樹的複雜性因素,樹分支被裁剪後誤差增加率由下式決定:
其中 ,是結點的誤差率;是結點的樣本個數與訓練集樣本個數的比值!
等於子樹所有葉子結點的誤差之和!
那麼問題是上式是怎麼來的?
首先我們看下在剪枝過程中,計運算元樹的損失函式:
與上面的一樣是不是,我們知道為引數為時的子樹的整體損失,對於固定的,一定存在使損失函式最小的子樹,將其表示為。在損失函式最小的意義下是最優的。並且Breiman已經證明這樣的最優子樹是唯一的。
具體的,從整體樹開始剪枝。對的任意內部結點,,若將進行剪枝,即以為單結點的損失函式為:
(對剪枝後,由於葉結點變成它自己,所以)
以為根節點的子樹的損失函式為:
(沒有對剪枝,所以它還有葉結點)
對剪枝前 | ||
對剪枝後 |
當或充分小時,有不等式
(前面講過葉結點很是多的,所以複雜度高,分的細,精度高,所以損失函式小;那麼剪枝後,由於剪去了個葉結點,所以精度變得低了一些,自然損失函式就大了一些,所以有了這個不等式)
當增大時,在某一有
(因為無論怎麼變化,剪枝後的樹就是客觀存在的,所以都是不變的,那麼當變大之後,剪枝前葉子結點就越少,所以分的沒以前細,精度就變得低了一些,直到剪枝前的誤差等於剪枝後的誤差)
當再增大時,不等式反向,所以只要
解得:
與有相同的損失函式值,而的結點少了(剪枝前與剪枝後的損失函式一樣,並且剪枝後的葉節點也少了,當然要剪枝啦),對進行剪枝!就是中具有最小值對應的剪枝樹。
接下來我們就一個例子來簡單的描述一個剪枝的過程:
如圖所示為一個有80個樣本的決策樹,分類分別為,,其中對於結點(類樣本有46個,類樣本有4個),根據多數分類原則結點應該分為類,所以:
結點的葉結點()被裁剪之後的誤差為
分類與迴歸樹(classification and regression tree,CART)是應用廣泛的決策樹學習方法,同樣由特徵選擇,樹的生成以及剪枝組成,既可以用於分類也可以用於迴歸。CART假設假設決策樹是二叉樹,內部結點特徵
自己自學機器學習的相關知識,過了一遍西瓜書後準備再刷一遍,後來在看別人打比賽的程式碼時多次用到XGBoost,lightGBM,遂痛下決心認真學習機器學習關於樹的知識,自己學習的初步流程圖為:
決策樹(ID3,C4.5)---->CART-----&
上一篇文章講了GBDT的迴歸篇,其實這一篇文章的原理的思想基本與迴歸相同,不同之處在於分類任務需用的損失函式一般為logloss、指數損失函式。
回
整合學習(ensemble learning)想必應該是最為火爆的機器學習演算法了,它通過構建並結合多個學習器來完成學習任務;類似於我們長說的“採百家之長”,目前的整合學習方法
演算法原理
Decision Trees (DTs) 是一種用來 和 regression 的無參監督學習方法。其目的是建立一種模型從資料特徵中學習簡單的決策規則來預測一個目標變數的值。決策樹類似於流程圖的樹結構,分支節點表示對一個特徵進行測試,根據測試結果進行分類,樹節點
決策樹面試知識點最全總結(一)
一:首先明確以下幾個基本問題:
1.決策樹是幹什麼用的?
一種最基本的分類與迴歸方法,因為實際應用中基本上全是用來分類,所以重點討論分類決策樹。
2.決策樹優缺點:
優點:
1)
宣告:參考書目《機器學習實戰》作者: Peter Harrington 出版社: 人民郵電出版社 譯者: 李銳 / 李鵬 / 曲亞東 / 王斌
宣告:參考書目《統計學習方法》作者: 李航 出版社: 清華大學出版社 ISBN: 9787302275954
宣告:參考書目《機器學習實戰》作者: Peter Harrington 出版社: 人民郵電出版社 譯者: 李銳 / 李鵬 / 曲亞東 / 王斌
宣告:參考書目《統計學習方法》作者: 李航 出版社: 清華大學出版社 ISBN: 9787302275954
決策樹簡介
決策樹算是最好理解的分類器了。決策樹就是一個多層if-else函式,就是對物件屬性進行多層if-else判斷,獲取目標屬性(類標籤)的類別。由於只使用if-else對特徵屬性進行判斷,所以一般特徵屬性為離散值,即使為連續值也會先進行區間離散 一、背景及問題
決策樹演算法是為了解決二分類問題出現的,是根據歷史經驗(或訓練集)來做判斷,生成決策結果(或樹狀圖)的過程。
/*請尊重作者勞動成果,轉載請標明原文連結:*/
/* https://www.cnblogs.com/jpcflyer/p/11037256.html 一、概念
KNN主要用來解決分類問題,是監督分類演算法,它通過判斷最近K個點的類別來決定自身類別,所以K值對結果影響很大,雖然它實現比較簡單,但在目標資料集比例分配不平衡時,會造成結果的不準確。而且KNN對資源開銷較大。
二、計算
通過K近鄰進行計算,需要:
1、載入打標好的資料集,然 天氣 次數 format 定義 表示 葉子節點 ast 代碼 wid 一、復習信息熵
為了解決特征選擇問題,找出最優特征,先要介紹一些信息論裏面的概念。
1、熵(entropy)
python3代碼實現:
def calcShannonEnt(
什麼是決策樹?
如何構建決策樹?
ID3
C4.5
CART
決策樹的優缺點及改進
什麼是決策樹?
決策樹是運用於分類的一種樹結構,其本質是一顆由多個判斷節點組成的樹,其中的每個內部節點代表對某一屬性的一次測試,每條邊代表一個測試結果,而葉節點代表某個類或類的分佈。
屬於有監督學習
核心思想:
一、決策樹概述
決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的測試,每個分支代表一個測試輸出,每個葉節點代表一種類別。決策樹是一個預測模型,代表的是物件屬性與物件值之間的一種對映關係。
最初的節點稱為根節點(如圖中的"顏色"),有分支的節點稱為中間節點
目錄
背景
效果圖
整體流程
這裡用詞向量,而不是TF-IDF預處理後的向量
原始碼
背景
最近的專案中,用到了很多機器學習的演算法,每個機器學習的演算法在不同的樣本下的精準率是不同的。為了驗證每個演算法在每種不同樣本數
1、演算法介紹決策樹是一種基本的分類和迴歸方法,決策樹模型呈樹形結構,在分類問題中,表示基於特徵對例項進行分類的過程。決策樹學習通常包括三個步驟:特徵選擇、決策樹的生成和決策樹的修剪。決策樹的本質是從訓練資料集中歸納出一組分類規則。本文主要是對決策樹的ID3演算法的介紹,後文會介紹C4.5和CART演算
決策樹是一個預測模型;他代表的是物件屬性與物件值之間的一種對映關係。樹中每個節點表示某個物件,而每個分叉路徑則代表的某個可能的屬性值,而每個葉結點則對應從根節點到該葉節點所經歷的路徑所表示的物
本次學習利用MT_Train.csv中所給的資料對MT_Test.csv中的資料進行預測,判斷客戶是否會定期存款。根據所學知識,可採用sklearn中的決策樹等方法進行程式設計。歡迎大家一起討論學習進步。
訓練集和測試集連結如下:
一. 設計思路
1.讀取訓練集和測試集檔
《機器學習實戰》:決策樹之為自己配個隱形眼鏡
檔案列表如下圖所示:
一、構建決策樹
建立trees.py檔案,輸入以下程式碼。
'''
Created on Oct 12, 2010
Decision Tree Source Code for Machine Learnin 一、決策樹模型組合 單決策樹C4.5由於功能太簡單,並且非常容易出現過擬合的現象,於是引申出了許多變種決策樹,就是將單決策樹進行模型組合,形成多決策樹,比較典型的就是迭代決策樹GBRT和隨機森林RF。 在最近幾年的paper上,如iccv這種重量級會議,iccv 09年的裡面有不少 相關推薦
機器學習爬大樹之決策樹(CART與剪枝)
機器學習爬大樹之決策樹(ID3,C4.5)
機器學習爬大樹之(GBDT原理)--二分類篇
機器學習爬大樹之(GBDT原理)--迴歸篇
十大機器學習演算法之決策樹(用於信用風險)
機器學習面試知識點之決策樹相關
機器學習實戰——1.2決策樹(2)
機器學習實戰——1.2決策樹(1)
python機器學習案例系列教程——決策樹(ID3、C4.5、CART)
機器學習經典演算法之決策樹
機器學習分類演算法之K近鄰(K-Nearest Neighbor)
機器學習之決策樹(二)
機器學習十大演算法之決策樹(詳細)
機器學習十大經典演算法之決策樹(學習筆記整理)
機器學習 之 決策樹(Decision Tree)文字演算法的精確率
機器學習之決策樹(一)
機器學習之決策樹(Decision Tree)及其Python程式碼實現
機器學習入門之決策樹(python實現)
《機器學習實戰》:決策樹之為自己配個隱形眼鏡
【機器學習】迭代決策樹GBRT(漸進梯度迴歸樹)