机器学习:算法模型:决策树
原文鏈接:https://www.cnblogs.com/wenyi1992/p/7685131.html
【基本流程】
分類決策樹(shù)的核心思想就是在一個(gè)數(shù)據(jù)集中找到一個(gè)最優(yōu)特征,然后從這個(gè)特征的選值中找一個(gè)最優(yōu)候選值(這段話稍后解釋),根據(jù)這個(gè)最優(yōu)候選值將數(shù)據(jù)集分為兩個(gè)子數(shù)據(jù)集,然后遞歸上述操作,直到滿足指定條件為止。
最優(yōu)特征怎么找?這個(gè)問(wèn)題其實(shí)就是決策樹(shù)的一個(gè)核心問(wèn)題了。我們常用的方法是更具信息增益或者信息增益率來(lái)尋找最優(yōu)特征,信息增益這東西怎么理解呢!搞清這個(gè)概念我們首先需要明白熵這個(gè)東西!熵簡(jiǎn)單的講就是說(shuō)我們做一件事需要的代價(jià),代價(jià)越高肯定就越不好了。放到機(jī)器學(xué)習(xí)的數(shù)據(jù)集中來(lái)講就是我們數(shù)據(jù)的不確定性,代價(jià)越高對(duì)應(yīng)的不確定就越高,我們用決策樹(shù)算法的目的就是利用數(shù)據(jù)的一些規(guī)則來(lái)盡可能的降低數(shù)據(jù)集的不確定性。好了,有了這個(gè)思想我們要做的事就很簡(jiǎn)單了,給定一批數(shù)據(jù)集,我們可以很容易得到它的不確定性(熵),然后呢!我們要想辦法降低這個(gè)不確定性,我們需要挖掘數(shù)據(jù)集中有用的特征,在某個(gè)特征的限制下,我們又能得到數(shù)據(jù)集的不確定性(這個(gè)其實(shí)就是書(shū)上的條件熵),一般而言給定了一個(gè)有用的特征,數(shù)據(jù)的不確定性肯定降低了(因?yàn)橛幸粋€(gè)條件約束,比沒(méi)有條件約束效果肯定會(huì)好一點(diǎn),當(dāng)然你的特征沒(méi)有用,那就另說(shuō)了)。我們用兩次的值作差,這個(gè)結(jié)果的含義很明了,給定了這個(gè)特征,讓我們數(shù)據(jù)集的不確定性降低了多少,當(dāng)然降低的越多這個(gè)特征肯定就越好了。而我們講了這么多就是要找到那一個(gè)讓數(shù)據(jù)集不確定性降低最多的特征。我們認(rèn)為這個(gè)特征是當(dāng)前特征中最好的一個(gè)。
我們找到了最優(yōu)特征,為什么還要找最優(yōu)特征的最優(yōu)候選值?其實(shí)呀,找不找主要看我們面對(duì)的問(wèn)題,一般的二分類問(wèn)題確實(shí)沒(méi)必要找(因?yàn)榭偣簿蛢蓚€(gè)類),但對(duì)于多分類問(wèn)題,這個(gè)還是建議找,為什么要找呢?我們來(lái)分析一下:假如我們的某個(gè)最優(yōu)特征有三個(gè)類別:我們?nèi)绻徽揖椭苯臃譃槿齻€(gè)子節(jié)點(diǎn)了。這樣會(huì)出現(xiàn)一個(gè)問(wèn)題,就是我們的這個(gè)分類對(duì)特征值會(huì)變得敏感,為什么這么說(shuō),我們來(lái)講一個(gè)很簡(jiǎn)答的例子:我們平時(shí)考試規(guī)定了60分及格,這個(gè)控制對(duì)于大多數(shù)學(xué)生很好把控,因?yàn)榫鸵粋€(gè)條件,相當(dāng)于一個(gè)二分類。但是如果我們把條件控制嚴(yán)格一些,比如超過(guò)60分,不超過(guò)80分為優(yōu)秀學(xué)生(當(dāng)然有點(diǎn)扯蛋了)。這個(gè)控制很多學(xué)霸就不好控制了,對(duì)于多分類問(wèn)題也是這個(gè)道理,如果我們一下子從父節(jié)點(diǎn)直接分了多個(gè)子節(jié)點(diǎn),那么我們的數(shù)據(jù)肯定會(huì)對(duì)這個(gè)控制很敏感,敏感就會(huì)導(dǎo)致出錯(cuò)。出錯(cuò)不是我們希望看到的,所以我們建議對(duì)多分類問(wèn)題找最優(yōu)候選值來(lái)轉(zhuǎn)化為二分類問(wèn)題,同樣多個(gè)二分類問(wèn)題其實(shí)也是一個(gè)多分類問(wèn)題,只是多了幾個(gè)遞歸過(guò)程而已。
什么時(shí)候停止?停止條件是什么?這個(gè)問(wèn)題其實(shí)書(shū)上也講得很簡(jiǎn)單,基本都是一筆帶過(guò)的,我來(lái)稍微詳細(xì)說(shuō)一下:我們從問(wèn)題的根源出發(fā)去想一下,我們構(gòu)造一顆決策樹(shù)的目的是什么?當(dāng)然是為了能在數(shù)據(jù)集上取得最好的分類效果,很好這就是一個(gè)停止標(biāo)準(zhǔn)呀!當(dāng)我們檢測(cè)到數(shù)據(jù)的分類效果已經(jīng)夠好了,我們其實(shí)就可以停止了。當(dāng)然我們常用的是控制葉節(jié)點(diǎn),比如控制葉節(jié)點(diǎn)的樣本數(shù)目,比如當(dāng)某個(gè)子節(jié)點(diǎn)內(nèi)樣本數(shù)目小于某一個(gè)指定值,我們就決定不再分了。還有葉節(jié)點(diǎn)的純度,我們規(guī)定葉節(jié)點(diǎn)樣本必須屬于同一類才停止,這也是一個(gè)停止條件。還有最大樹(shù)的深度,比如我們規(guī)定樹(shù)的最大深度為某一個(gè)值,當(dāng)樹(shù)深度到達(dá)這個(gè)值我們也要停止。還有比如:分裂次數(shù),最大特征數(shù)等等。總之停止條件不是死的,我們可以更具自己的問(wèn)題來(lái)隨意控制,開(kāi)心就好!
【屬性選擇】
- 信息增益——ID3
ID3算法其實(shí)就是我們一般所理解的決策樹(shù)算法,其基本步驟就是我們上面所講的步驟,這個(gè)算法的核心思想就是用信息增益來(lái)選擇最優(yōu)分類特征,信息增益的公式上面也給出了,這個(gè)公式我們仔細(xì)分析一下會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題:我們需要找到gain(D,A)最大的特征,對(duì)于一個(gè)數(shù)據(jù)集entropy(D)是給定的,也就是說(shuō)我們需要entropy(D,A)最小,意思就是我們所選的特征是那些分完后子節(jié)點(diǎn)的純度最高的特征,什么樣的特征分完后子節(jié)點(diǎn)的特征純度比較高(熵比較小),該特征的子類別很多,即可取值很多的這一類特征。總結(jié)一下就是信息增益偏向于去那些擁有很多子類的特征。這也是這個(gè)算法的一大致命缺點(diǎn),任何帶有主觀偏向性的算法都不是一個(gè)好的算法,當(dāng)然ID3算法的另一個(gè)缺點(diǎn)也顯而易見(jiàn),它只能處理那些分類的特征,對(duì)于連續(xù)值特征毫無(wú)辦法(其實(shí)我們可以人為的把連續(xù)屬性給離散化,但是人為必然會(huì)導(dǎo)致可能不準(zhǔn)確)。
- 增益率——C4.5
因此就有了下面的這個(gè)算法
C4.5是對(duì)ID3算法的一個(gè)改進(jìn),主要改進(jìn)點(diǎn)就是解決了ID3的幾個(gè)缺點(diǎn)。首先C4.5算法用的是信息增益率來(lái)代替ID3中的信息增益。從表達(dá)式可以看出來(lái),這么做其實(shí)就是弱化那些偏向,讓選擇最優(yōu)特征時(shí)更加公平。
另外C4.5的改進(jìn)就是可以處理連續(xù)值(這個(gè)方法其實(shí)和上面我提到的連續(xù)值離散化很類似,可以理解為單點(diǎn)逐一離散化),具體步驟如下:
1.首先對(duì)于連續(xù)值屬性的值進(jìn)行排序(A1,A2......An);
2.我們可以在每?jī)蓚€(gè)值之間取一個(gè)點(diǎn),用這個(gè)點(diǎn)就可以把該組連續(xù)值分為兩部分,比如我們?nèi)ヒ粋€(gè)點(diǎn)a1($A1<a1<A2$),則小于a1的部分(A1)大于a1的部分(A2......An)。但是這個(gè)a1好嗎?不知道呀!那我們loop一下所有這樣的a(共有n-1個(gè)),每一個(gè)ai我們可以算出分裂前后的信息增益率,然后我們求一個(gè)max即可。很簡(jiǎn)單吧!思路很好,但是呀很顯然有個(gè)問(wèn)題,時(shí)間開(kāi)銷有點(diǎn)大。
3.缺失值的處理,ID3不能直接處理(需要我們?nèi)斯ぬ幚?#xff0c;比如單獨(dú)賦值或賦一個(gè)平均值),C4.5給出了一個(gè)很優(yōu)雅的方式,為什么說(shuō)優(yōu)雅,這樣講吧!我們每一個(gè)特征的取值都有若干個(gè),根據(jù)訓(xùn)練集每個(gè)可能的取值都有一個(gè)概率,我們用這個(gè)概率來(lái)表示這個(gè)確實(shí)值得可能取值。這樣就顯得很合理了。
- C5.0
C4.5各方面完勝ID3,所以C4.5一出現(xiàn)就被廣泛應(yīng)用,后面為了解決這個(gè)算法的時(shí)間開(kāi)銷問(wèn)題,推出了這個(gè)算法的改進(jìn)版C5.0。
國(guó)外有一篇比較C4.5和C5.0性能的blog寫(xiě)的很好,可以搜一下。大體上C5.0的速度是C4.5的10倍以上。
- 基尼系數(shù)——CART
我們講了這么多其實(shí)都沒(méi)逃脫classification tree。我們還有很大一塊問(wèn)題沒(méi)有講,那就是regression。
這里我們?cè)趤?lái)講講regression tree。講到regression tree我們就不能不提大名鼎鼎的CART(classification and regression tree)樹(shù)了,這個(gè)才是最為核心的決策樹(shù)。
為什么這么說(shuō),因?yàn)檠轿覀円院笫褂玫降膔andom forest,gbdt, xgboost里面的base estimator 都是CART樹(shù)。所以這個(gè)東西我來(lái)認(rèn)真講講。
CART樹(shù)既可以用于分類問(wèn)題也可以用于回歸問(wèn)題,用于分類問(wèn)題的思想和我們上面介紹的ID3,C4.5其實(shí)是一樣的,唯一的不同就是CART樹(shù)用的是基尼指數(shù)來(lái)確定最優(yōu)劃分點(diǎn)的。
基尼指數(shù): $gini(D) = \sum_{i=1}^n p_k?(1-p_k)$
基尼指數(shù)的通俗解釋就是:表示一件事物的不確定性,基尼指數(shù)越大不確定性越大。
我們要找基尼指數(shù)小的特征,這樣的特征對(duì)于劃分?jǐn)?shù)據(jù)集的準(zhǔn)確性會(huì)更高(不確定性低嘛)
類似的有一個(gè)條件基尼指數(shù):$gini(D,A) = \sum_{i=1}^k \frac {D_{A_i}}{D}?gini(D_{A_i})$整體思路跟信息增益一樣,我就不浪費(fèi)時(shí)間了。
對(duì)于回歸問(wèn)題:首先簡(jiǎn)單描述一下決策樹(shù)處理回歸問(wèn)題的流程:
對(duì)于一個(gè)數(shù)據(jù)集我們可以將其分為m個(gè)子區(qū)間(R1,R2......Rm)對(duì)于每一區(qū)間我們可以產(chǎn)生一個(gè)對(duì)應(yīng)的輸出cm.
我們的最終輸出$f(x)=\sum_{i=1}^mc_mI(x \in R_m)$.對(duì)于一個(gè)給定的回歸樹(shù)我們用平方誤差來(lái)表示每個(gè)單元的損失$\sum_{x_i \in R_m}(y_i-f(x_i))^2$,
那么我們每個(gè)單元的最優(yōu)輸出就是使該單元的損失函數(shù)最小。
每個(gè)單元的最終輸出可以表示為$C = avg(y_i|x_i)(x_i \in R_m)$(區(qū)間$R_m$ 上所有$x_i$ 的輸出$y_i$的均值)
對(duì)于回歸問(wèn)題,我們面臨的問(wèn)題也是如何確定劃分點(diǎn)(決策樹(shù)的核心)。
這里CART樹(shù)的處理方式和C4.5處理連續(xù)變量的方式有點(diǎn)類似,即對(duì)于每個(gè)特征的取值,我們從中找一個(gè)點(diǎn)j,這個(gè)點(diǎn)j可以將該特征分為兩部分$R_1 = ({ x|x_i
這里我們必須強(qiáng)調(diào)一下,我們?cè)谑褂脹Q策樹(shù)尋找每一步的最優(yōu)切分點(diǎn)時(shí),常用的是貪心算法,貪心算法有一個(gè)問(wèn)題就是局部最優(yōu),而不是全局最優(yōu)。
所以我們一定要記住,決策樹(shù)在選擇特征及切分點(diǎn)時(shí)考慮的是一個(gè)局部最優(yōu)問(wèn)題。
好了!上面基本就是決策樹(shù)最常用的三個(gè)算法,我們先介紹了分類樹(shù)及分類樹(shù)中兩個(gè)經(jīng)典算法ID3和C4.5,然后我們又介紹了回歸樹(shù)CART樹(shù),
這個(gè)樹(shù)在目前是主流的決策樹(shù),使用很廣泛,必須十分熟悉其中的一些關(guān)鍵問(wèn)題。
?
【剪枝處理】
- 預(yù)剪枝
- 后剪枝
【連續(xù)值與缺失值】
- 連續(xù)值處理
- 缺失值處理
【多變量決策樹(shù)】
轉(zhuǎn)載于:https://www.cnblogs.com/ForTech/p/8666873.html
總結(jié)
以上是生活随笔為你收集整理的机器学习:算法模型:决策树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Day03 javascript详解
- 下一篇: 表变量与临时表的优缺点