葉編碼使用方式
您好,
一、
# 梯度提升樹調整參數並擬合後, 再將葉編碼 (*.apply) 結果做獨熱 / 邏輯斯迴歸
gdbt = GradientBoostingClassifier(subsample=0.93, n_estimators=320, min_samples_split=0.1,
min_samples_leaf=0.3, max_features=4, max_depth=4, learning_rate=0.16)
onehot = OneHotEncoder()
lr = LogisticRegression(solver='lbfgs', max_iter=1000)
gdbt.fit(train_X, train_Y)
onehot.fit(gdbt.apply(train_X)[:, :, 0]) ---->此處有兩個問題請教1.apply(train_X)即是葉編碼嗎?
2.[:, :, 0]是什麼意思呢?(我有自己print來看
,但看不懂。
lr.fit(onehot.transform(gdbt.apply(val_X)[:, :, 0]), val_Y)
二、
DAY_030 HW中提到,
「隨機森林的葉編碼(.apply)不需要加上[:, :, 0], 直接用rf.apply()調用即可」
,為什麼隨機森林不需要加[:, :, 0]呢?
謝謝幫忙!
回答列表
-
2019/05/21 下午 04:01陳明佑 (Ming You Chen)贊同數:1不贊同數:0留言數:1
一.
1. apply(train_X)是葉編碼沒錯,
2. [:, :, 0] 是因為梯度提升樹分類器傳回的葉編碼, 是三維的向量
維度分別是, 第n筆資料 / 第n棵樹 / 第n個類別,
但我們這邊只取第一個類別, 所以前兩個維度全選, 第三個維度只取第一個類別的葉編碼
這是因為梯度提升需要一棵棵樹的疊加出結果, 所以計算時m個類別的機率是分開算的
所以葉編碼時同一棵樹有m組編碼
二.
隨機森林分類器中, 不是m個機率獨立決定, 而是每個葉點都只估計一種類別
最後全部的樹材多數決, 把標籤定給最多票的分類
所以樹的結構只會有兩個維度, 因此不需要加[:,:,0]