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

一.決策樹

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

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

分支方法:對於連續特徵的狀況:比較閾值,高於某個閾值就屬於某一類,低於某個閾值屬於另外一類。對於離散特徵:抽取子特徵,好比顏值這個特徵,有帥、醜、中等三個水平,能夠先分爲帥和不帥的,不帥的裏面再分紅醜和中等的。dom

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

損失函數:其實這裏的損失函數,就是分類的準則,也就是求最優化的準則學習

對於分類樹(目標變量爲離散變量):同一層全部分支假設函數的基尼係數的平均。優化

對於迴歸樹(目標變量爲連續變量):同一層全部分支假設函數的平方差損失spa

在二維空間(只有一個特徵)其實對於迴歸樹來講就是一個經過創建一個分段的平行線函數(一塊接近的數據用他們的均值來代替)來逼近最後的目標值,而想經過這種方式來要獲得要設置樹的深度,可是書的深度很深的話就會使得模型有過擬合的風險.net

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個特徵中選擇最優的,隨機森林分類效果(錯誤率)與兩個因素有關:rest

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

 

  減少特徵選擇個數m,樹的相關性和分類能力也會相應的下降;增大m,二者也會隨之增大。因此關鍵問題是如何選擇最優的m(或者是範圍),這也是隨機森林惟一的一個參數。blog

咱們能夠經過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

相關文章
相關標籤/搜索