人工智能之機器學習主要有三大類:1)分類;2)迴歸;3)聚類。今天咱們重點探討一下CART算法。算法
咱們知道十大機器學習中決策樹算法佔有兩席位置,即C4.5算法和CART算法,可見CART算法的重要性。下面重點介紹CART算法。機器學習
不一樣於ID3與C4.5,CART爲一種二分決策樹,是滿二叉樹。CART算法由Breiman等人在1984年提出,它採用與傳通通計學徹底不一樣的方式構建預測準則,它是以二叉樹的形式給出,易於理解、使用和解釋。由CART模型構建的預測樹在不少狀況下比經常使用的統計方法構建的代數學預測準則更加準確,且數據越複雜、變量越多,算法的優越性就越顯著。函數
CART算法既可用於分類也可用於迴歸。CART算法被稱爲數據挖掘領域內里程碑式的算法。學習
** CART算法概念:**優化
CART(Classification andRegression Tree)分類迴歸樹是一種決策樹構建算法。CART是在給定輸入隨機變量X條件下輸出隨機變量Y的條件機率分佈的學習方法。CART假設決策樹是二叉樹,內部結點特徵的取值爲「是」和「否」,左分支是取值爲「是」的分支,右分支是取值爲「否」的分支。這樣的決策樹等價於遞歸地二分每一個特徵,將輸入空間即特徵空間劃分爲有限個單元,並在這些單元上肯定預測的機率分佈,也就是在輸入給定的條件下輸出的條件機率分佈。人工智能
CART算法既能夠處理離散型問題,也能夠處理連續型問題。這種算法在處理連續型問題時,主要經過使用二元切分來處理連續型變量,即特徵值大於某個給定的值就走左子樹,或者就走右子樹。blog
** CART算法組成:**遞歸
** CART算法組成以下:**get
1)決策樹生成:基於訓練數據集生成決策樹,生成的決策樹要儘可能大;自上而下從根開始創建節點,在每一個節點處要選擇一個最好(不一樣算法使用不一樣指標來定義"最好")的屬性來分裂,使得子節點中的訓練數據集儘可能的純。數學
2)決策樹剪枝:用驗證數據集對已生成的樹進行剪枝並選擇最優子樹,這時損失函數最小做爲剪枝的標準。這裏用代價複雜度剪枝CCP(Cost-Complexity Pruning)。
決策樹的生成就是經過遞歸地構建二叉決策樹的過程,對迴歸樹用平方偏差最小化準則,對分類樹用基尼指數最小化準則,進行特徵選擇,生成二叉樹。 CART決策樹生成:
** 1)迴歸樹生成**
迴歸樹採用均方偏差做爲損失函數,樹生成時會遞歸的按最優特徵與最優特徵下的最優取值對空間進行劃分,直到知足中止條件爲止,中止條件能夠人爲設定,好比當切分後的損失減少值小於給定的閾值ε,則中止切分,生成葉節點。對於生成的迴歸樹,每一個葉節點的類別爲落到該葉節點數據的標籤的均值。
迴歸樹爲一棵二叉樹,每次都是按特徵下的某個取值進行劃分,每個內部節點都是作一個對應特徵的判斷,直至走到葉節點獲得其類別,構建這棵樹的難點在於如何選取最優的切分特徵與切分特徵對應的切分變量。
迴歸樹與模型樹既能夠處理連續特徵也能夠處理離散特徵。
迴歸樹生成算法以下:
輸入:訓練數據集D={(x1,y1),(x2,y2),…,(xN,yN)}
輸出:迴歸樹T
1)求解選擇切分特徵j與切分特徵取值s,j將訓練集D劃分爲兩部分,R1與R2,依照(j,s)切分後以下:
R1(j,s)={xi|xji≤s}R2(j,s)={xi|xji>s}
c1=1N1∑xi∈R1yi c2=1N2∑xi∈R2yi
2)遍歷全部可能的解(j,s),找到最優的(j*,s*),最優的解使得對應損失最小,按照最優特徵(j*,s*)來切分便可。
Min{∑(yi–c1)^2+∑(yi–c2)^2}
j,s xi∈R1 xi∈R2
3)遞歸調用1)和2),直到知足中止條件。
4)返回決策樹T。
迴歸樹主要採用了分治策略,對於沒法用惟一的全局線性迴歸來優化的目標進行分而治之,進而取得比較準確的結果,但分段取均值並非一個明智的選擇,能夠考慮將葉節點設置爲一個線性函數,這即是所謂的分段線性模型樹。實驗代表:模型樹效果比迴歸樹的效果要好一些。模型樹只需在迴歸樹的基礎上稍加修改便可,對於分到葉節點的數據,採用線性迴歸的最小均方損失來計算該節點的損失。 2)分類樹生成
分類樹是CART中用來分類的,不一樣於ID3與C4.5,CART分類樹採用基尼指數來選擇最優的切分特徵,並且每次都是二分。
基尼指數是一個相似與熵的概念,對於一個有K種狀態對應的機率爲p1,p2,…,pK的隨機變量X,其基尼指數Gini定義以下:
Gini(X)=∑pk(1?pk)=1?∑kp2k
k k
在已知特徵A條件下集合D的基尼指數:
Gini(D,A)=(|D1|/|D|)*Gini(D1)+(|D2|/|D|)*Gini(D2)
Gini(D,A)取值越大,樣本的不肯定性也越大,這一點與熵相似,因此選擇特徵A的標準是Gini(D,A)的取值越小越好。