一、前言
分類與回歸樹(classification and regression trees, cart)是由leo breiman, jerome friedman, richard olshen與charles stone於1984年提出,既可用於分類也可用於回歸。cart被稱為資料探勘領域內里程碑式的演算法。
題外話,十大經典資料探勘演算法:
c4.5
k-means
svmapriori
empagerank
adaboost
knnnaïve bayes
cart
不同於c4.5,cart本質是對特徵空間進行二元劃分(即cart生成的決策樹是一棵二叉樹),並能夠對標量屬性(nominal attribute)與連續屬性(continuous attribute)進行**。
二、cart演算法總體流程
t代表當前樣本集,當前候選屬性集用t_attributelist表示。
(1)建立根節點n
(2)為n分配類別
(3)if t都屬於同一類別or t中只剩下乙個樣本則返回n為葉節點,否則為其分配屬性
(4)for each t_attributelist中,執行該屬性上的乙個劃分,計算此劃分的gini係數
(5)n的測試屬性test_attribute=t_attributelist中最小gini係數的屬性
(6)劃分t得到t1、t2子集
(7)對於t1重複(1)-(6)
(8)對於t2重複(1)-(6)
三、cart生成
2.1、分支方法
對於連續特徵:比較閾值,高於某個閾值就屬於某一類,低於某個閾值屬於另一類。
對於離散特徵:抽取子特徵,比如顏值這個特徵,有帥、醜、中等三個水平,可以先分為帥和不帥的,不帥的裡面再分成醜和中等的。
2.2、採用gini指數來度量**時的不純度
2.3、 剪枝
下面這六種情況都會停止**:
如果節點中所有觀測屬於一類(此種情形屬於數的完全成長,會出現過擬合問題,需要剪枝)
如果節點中所有觀測的屬性取值一致
如果樹的深度達到設定閾值
如果節點所含觀測值小於設定的父節點應含觀測數的閾值
如果節點的子節點所含觀測數小於設定的閾值
如果沒有屬效能滿足設定的**準則的閾值
剪枝分兩種:
後剪枝:在已生成過擬合決策樹上進行剪枝,刪除沒有意義的組,可以得到簡化版的剪枝決策樹。有rep、pep、ccp三種規則。
ccp,即給**準則—基尼係數加上懲罰項,此時樹的層數越深,基尼係數的懲罰項會越大。
四、cart與邏輯回歸的比較
主要優缺點如下圖:
缺點補充幾點:
不是很穩定,資料變化一點,你的樹就會發生變化;
沒有考慮變數之間相關性,每次篩選都只考慮乙個變數(因此不需要歸一化);
只能線性分割資料;
貪婪演算法(可能找不到最好的樹)。
優點也補充幾點:
同時可以處理分類變數和數值變數(但是可能決策樹對連續變數的劃分並不合理,所以可以提前先離散化);
可以處理多輸出問題;
另外決策樹不需要做變數篩選,它會自動篩選;
適合處理高維度資料。
五、隨機森林
儘管有剪枝等等方法,一棵樹的生成肯定還是不如多棵樹,因此就有了隨機森林,解決決策樹泛化能力弱的缺點。(可以理解成三個臭皮匠頂過諸葛亮)
同一批資料,用同樣的演算法只能產生一棵樹,這時
bagging策略可以幫助我們產生不同的資料集。
bagging策略**於bootstrap aggregation:從樣本集(假設樣本集n個資料點)中重取樣選出nb個樣本(有放回的取樣,樣本資料點個數仍然不變為n),在所有樣本上,對這n個樣本建立分類器(id3\c4.5\cart\svm\logistic),重複以上兩步m次,獲得m個分類器,最後根據這m個分類器的投票結果,決定資料屬於哪一類。
隨機森林在bagging的基礎上更進一步:
樣本的隨機:從樣本集中用bootstrap隨機選取n個樣本
特徵的隨機:從所有屬性中隨機選取k個屬性,選擇最佳分割屬性作為節點建立cart決策樹(泛化的理解,這裡面也可以是其他型別的分類器,比如svm、logistics)
重複以上兩步m次,即建立了m棵cart決策樹
這m個cart形成隨機森林,通過投票表決結果,決定資料屬於哪一類(投票機制有一票否決制、少數服從多數、加權多數)
Bagging與隨機森林
給定包含 m 個樣本的資料集 d,我們對它進行取樣產生資料集 d 每次隨機從 d 中挑選乙個樣本,將其拷貝放入 d 然後再將該樣本放回初始資料集 d 中,使得該樣本在下次取樣時仍有可能被採到 這個過程重複執行 m次後,我們就得到了包含 m 個樣本的資料集 d 這就是自助取樣的結果。顯然,d 中有一部...
Bagging與隨機森林
前今天整理了決策樹的原理實現,順手再把隨機森林的原理整理整理。bagging是並行式整合學習方法最著名的代表,其原理是給定包含m個樣本的資料集,我們先隨機取出乙個樣本放入取樣集中,再把該樣本放回初始資料集 有放回 這樣經過m此隨機取樣操作,我們得到含有m個樣本的取樣集。照這樣,我們可取樣出t個含m個...
Bagging演算法與隨機森林
給定包含m個樣本的資料集d,我們對它進行取樣產生資料集d 每次隨機從d中挑選乙個樣本,將其拷貝放入d 然後再將該樣本放回初始資料集d中,使得該樣本在下次取樣時仍有可能被取樣到 這個過程重複執行m次後,我們就得到了包含m個樣本的資料集d 這就是自助取樣的結果。顯然有一部分樣本會在d 中出現多次,而另一...