決策樹和svm一樣是一種通用機(jī)器學(xué)習(xí)算法
既可以做回歸移剪,也可以做分類
同時(shí)也是Random Forest 隨機(jī)森林的基本組件
安德森鳶尾花卉數(shù)據(jù)集,是一類多重變量分析的數(shù)據(jù)集匾南。
這里我們就是用DecisionTreeClassifier簡(jiǎn)單的fit了這些數(shù)據(jù)。然后將它輸出成一個(gè)graphviz文件遇八,使用這個(gè)文件我們就可以講生成的決策樹可視化胃珍。
當(dāng)然甸昏,只有這個(gè)文件的時(shí)候我們是什么也看不到的,里面大概長(zhǎng)這樣:
這個(gè)時(shí)候我們需要下載Graphviz這個(gè)繪圖軟件
https://graphviz.gitlab.io/_pages/Download/Download_windows.html
安裝完之后把安裝目錄加到環(huán)境變量的path里
之后在cmd中輸入dot -version檢測(cè)是否安裝成功
切換到生成的dot文件所在目錄下丝里,輸入
dot -Tpng iris_tree.dot -o iris_tree.png
然后我們獲得了這個(gè)png
iris_tree.png
可以看出,我們只是用了花瓣長(zhǎng)度和花瓣寬度兩個(gè)特征去判別這個(gè)樣本屬于哪一種Iris体谒,首先看長(zhǎng)度杯聚,小于2.45的就直接被判定成是setosa了,大于的再根據(jù)寬度判斷是versicolor還是virginica抒痒。
決策樹的一大好處就是不需要非常大的數(shù)據(jù)量幌绍,也不需要特征縮放和中心化
samples指的是這一類中有多少樣本。
value告訴你實(shí)際上分布的情況是怎樣的故响,比如第一層的左邊的節(jié)點(diǎn)里有50個(gè)樣本傀广,這50個(gè)樣本全是屬于setosa類的,然而右節(jié)點(diǎn)里有100個(gè)樣本彩届,50個(gè)是versicolor主儡,50個(gè)是virginica。
gini指的是這個(gè)節(jié)點(diǎn)的純度惨缆,第一層的左邊的節(jié)點(diǎn)50個(gè)樣本中全是輸入setosa類的糜值,所以是純的,gini為0坯墨。右邊的節(jié)點(diǎn)是versicolor類寂汇,但有一半是virginica,所以gini是0.5捣染。第二層左邊是versicolor類骄瓣,有53個(gè)樣本但其中只有49個(gè)真的是versicolor,所以
gini=1-(0/54)2-(49/54)2 -(5/54)2 ≈0.168耍攘。
sklean 使用Cart算法榕栏,只能生成二叉樹畔勤,如果是ID3之類的算法一個(gè)節(jié)點(diǎn)可以有更多子節(jié)點(diǎn)。
Decision Tree通常被當(dāng)成是一種白盒模型扒磁,因?yàn)榭磮D就明白它所做的預(yù)測(cè)的原理都是可以被簡(jiǎn)單地理解的庆揪,而隨機(jī)森林和神經(jīng)網(wǎng)絡(luò)算法則通常被當(dāng)成黑盒模型。
CART 訓(xùn)練算法
全稱Classification And Regression Tree
簡(jiǎn)單地說就是選取一個(gè)特征 k 和一個(gè)閾值tk,將訓(xùn)練集分割成兩部分妨托,尋找k和tk的方法就是找到一組能夠產(chǎn)生最純的子集的(k缸榛,tk).
損失函數(shù)為
其中G是子集中的不純度,m是子集中樣本數(shù)量兰伤。
然后它會(huì)在子集中做同樣的事内颗,,當(dāng)然我們會(huì)加一些制約防止它一直這么干下去敦腔。
CART算法是一種貪心算法均澳,通常會(huì)給出一個(gè)優(yōu)秀的解,但不一定是最優(yōu)的選擇符衔。不幸的是找出最優(yōu)的那棵樹是一個(gè)NP完全問題找前。
正則化超參數(shù)
決策樹是一種nonparametric(非參數(shù)的)模型,它的參數(shù)對(duì)訓(xùn)練來說不是很重要柏腻,所以很容易就過擬合了纸厉。防止過擬合的方法被稱作正則化系吭,正則化參數(shù)取決于你所用的模型五嫂,在sklearn里我們用max_depth來防止過擬合。
DecisionTreeClassifier 有一些其他的參數(shù)來規(guī)范樹的形狀肯尺。
- min_samples_split(在被分割前這個(gè)子集必須至少包含這么多samples)
- min_samples_leaf(一個(gè)葉節(jié)點(diǎn)里必須至少有那么多samples)
- min_weight_fraction_leaf(大概和上一個(gè)一樣)
- max_leaf_nodes(最多有多少節(jié)點(diǎn))
- max_features(最多有多少特征用來分割)