數(shù)據(jù)建模中的樹模型常用于分類和預(yù)測,本文簡要介紹三種典型的樹模型霉囚。
損失函數(shù)
先介紹一下損失函數(shù)的概念捕仔,它被廣泛用做構(gòu)造樹時調(diào)整樹形和衡量模型性能的標(biāo)準(zhǔn),主要涉及兩個概念:1)方差(variance):某一模型對不同測試集的預(yù)測結(jié)果波動程度盈罐;2)偏差(bias):某次預(yù)測結(jié)果與實際數(shù)據(jù)的差榜跌。總的來說盅粪,模型簡單钓葫,偏差大、方差小票顾,欠擬合础浮;模型復(fù)雜,偏差小奠骄、方差大豆同,過擬合。因此模型優(yōu)化也是這樣一個尋找最佳平衡點的過程含鳞。
- 決策樹
決策樹是一種樹狀結(jié)構(gòu)影锈,它的每個葉節(jié)點對應(yīng)一個分類,非葉節(jié)點對應(yīng)在某個屬性上的劃分蝉绷,根據(jù)樣本在該屬性上的不同取值劃分成若干子集鸭廷。構(gòu)造決策樹的核心問題是每一步對樣本屬性如何做拆分。對于一個分類問題潜必,從已知數(shù)據(jù)做訓(xùn)練,生產(chǎn)決策樹是一個自上而下的分治過程沃但。
from sklearn.Tree import DecisionTreeRegressor
決策樹算法 | 算法描述 |
---|---|
ID3算法 | 決策樹的各級節(jié)點上使用信息增益作為屬性的選擇標(biāo)準(zhǔn)磁滚,只適用離散變量 |
C4.5算法 | 改進(jìn)ID3,使用信息增益率來選擇節(jié)點宵晚,離散或連續(xù)變量都適用 |
CART算法 | Classification And Regressor Tree(分類與回歸樹)垂攘,通過Gini**系數(shù)選擇節(jié)點,通過剪枝淤刃、評估樹構(gòu)造一棵二叉樹晒他。當(dāng)葉節(jié)點是離散量時,該樹為分類樹逸贾;當(dāng)葉節(jié)點是連續(xù)量時陨仅,該樹為回歸樹津滞。 |
- 隨機(jī)森林
多棵決策樹組成, 基于Bagging思想,有放回抽樣灼伤。每輪結(jié)果之間相互獨立触徐,因此損失函數(shù)的方差不對太大。
max_leaf_nodes
參數(shù)決定迭代次數(shù)狐赡,也就是樹的深度撞鹉,選取不當(dāng)會導(dǎo)致模型過(欠)擬合,后果是雖然訓(xùn)練結(jié)果準(zhǔn)確度很高颖侄,但 在實際部署時會發(fā)生意想不到的錯誤鸟雏,這被稱為數(shù)據(jù)泄露(data leakage)。二叉樹并不是越深越好览祖,太深會帶來overfitting(過擬合)的問題孝鹊,隨機(jī)森林構(gòu)造器的默認(rèn)參數(shù)往往最優(yōu)。
from sklearn.ensemble import RandomForestRegressor
- XGBoost
梯度提升決策樹穴墅。專門處理表格型數(shù)據(jù)惶室,如pd.DataFrame,基于Boosting玄货。
Boosting: 初始建立M個模型皇钞,大多簡單,每完成一次訓(xùn)練松捉,將出錯的 數(shù)據(jù)權(quán)重上升夹界,下次重點訓(xùn)練,最終模型由各個子模型按權(quán)重相加隘世,也就是說可柿,程序越往后運行,越關(guān)注那些權(quán)重大的數(shù)據(jù)丙者。
下面是一些關(guān)鍵的參數(shù):
- n_estimator: 迭代次數(shù)复斥,通常選較大的數(shù),1000.
- early_stopping_rounds:
model.fit(early_stopping_rounds=5)
,當(dāng)模型訓(xùn)練到一個理想值時自動停止訓(xùn)練械媒,即使沒有到n_estimator
指定的輪數(shù) - learning_rate: 將預(yù)測結(jié)果乘以一個因子再加到下一輪目锭,而不是簡單相加
- n_jobs: 并行作業(yè)數(shù),取計算機(jī)CPU核數(shù)
from xgboost import XGBoostRegressor
xgb = XGBRegressor(n_estimator=1000, learning_rate = 0.05, n_jobs=4)
xgb.fit(train_X, train_y, early_stopping_rounds=5)
一個問題:為什么RandomForest往往比GBDT深
GBDT每輪迭代數(shù)據(jù)都與上一輪結(jié)果有關(guān)纷捞,就信息元來說可以保證結(jié)果盡可能接近真實數(shù)據(jù)痢虹,偏差不會很大,但聯(lián)系緊密的數(shù)據(jù)擬合會使得方差過大主儡,因此需要淺一點的樹來降低方差奖唯。
而基于Bagging的隨機(jī)森林,各分類相互獨立糜值,受不同輸入數(shù)據(jù)的影響小丰捷,目標(biāo)是如何提高準(zhǔn)確度坯墨,因此采用很深甚至不剪枝的樹群。
數(shù)據(jù)挖掘小白一枚瓢阴,如有錯誤畅蹂,懇請大家指正~