sklearn--決策樹和基於決策樹的集成模型


一.決策樹

決策樹一般以選擇屬性的方式不同分為id3(信息增益),c4.5(信息增益率),CART(基尼系數),只能進行線性的分割,是一種貪婪的算法,其中sklearn中的決策樹分為回歸樹和分類樹兩種,默認的是CART的決策樹,下面介紹CART決策樹

分支條件:二分類問題(只用來構建二叉樹)

分支方法:對於連續特征的情況:比較閾值,高於某個閾值就屬於某一類,低於某個閾值屬於另一類。對於離散特征:抽取子特征,比如顏值這個特征,有帥、丑、中等三個水平,可以先分為帥和不帥的,不帥的里面再分成丑和中等的。

得分函數(y):分類樹基尼系數的最小值得特征或是最終的葉節點分類結果,對於回歸樹取得是均值。

損失函數:其實這里的損失函數,就是分類的准則,也就是求最優化的准則

對於分類樹(目標變量為離散變量):同一層所有分支假設函數的基尼系數的平均。

對於回歸樹(目標變量為連續變量):同一層所有分支假設函數的平方差損失

在二維空間(只有一個特征)其實對於回歸樹來說就是一個通過建立一個分段的平行線函數(一塊接近的數據用他們的均值來代替)來逼近最后的目標值,而想通過這種方式來要得到要設置樹的深度,但是書的深度很深的話就會使得模型有過擬合的風險

from sklearn.tree import DecisionTreeRegressor
from sklearn.tree import DecisionTreeClassifier
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1 = DecisionTreeClassifierr(max_depth=5)
regr_2.fit(X, y)
regr_1.fit(X, y)

 二.隨機森林

我們通過隨機的抽取部分樣本,抽取部分的特征,來訓練多顆決策樹,然后通過投票表決的方式來決定最終的分類(這是分類問題,若是回歸問題則是取最后結果的均值)在森林中每一棵樹都有平等的發言權,這種隨機深林是基於bagging的集成學習的方法,極大可能的過濾掉特征的誤差和樣本可能存在的誤差.這里我們要注意的是:如果每個樣本的特征維度為M,指定一個常數m<<M,隨機地從M個特征中選取m個特征子集,每次樹進行分裂時,從這m個特征中選擇最優的,隨機森林分類效果(錯誤率)與兩個因素有關:

  • 森林中任意兩棵樹的相關性:相關性越大,錯誤率越大;
  • 森林中每棵樹的分類能力:每棵樹的分類能力越強,整個森林的錯誤率越低。

 

  減小特征選擇個數m,樹的相關性和分類能力也會相應的降低;增大m,兩者也會隨之增大。所以關鍵問題是如何選擇最優的m(或者是范圍),這也是隨機森林唯一的一個參數。

我們可以通過oob來衡量隨機森林的好壞

 

from sklearn.ensemble import RandomForestClassifier
rf0 = RandomForestClassifier(oob_score=True, random_state=10)
rf0.fit(X,y)
print rf0.oob_score_

 

 三.adaboost+決策樹

自適應boost,思想是每一次選取誤差最小的模型,然后將錯誤的值權值加重,輸入給下一個模型,如果錯誤率越高其相應的模型權值就會變低

#設定弱分類器CART
weakClassifier=DecisionTreeClassifier(max_depth=1)

#構建模型。
clf=AdaBoostClassifier(base_estimator=weakClassifier,algorithm='SAMME',n_estimators=300,learning_rate=0.8)
clf.fit(X, y)

 四.GBDT(梯度提升決策樹)

https://blog.csdn.net/qq_22238533/article/details/79199605 gbdt的一些講解,

 

五.XGBOOST

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM