xgboost模型輸出的解釋
使用經典的鳶尾花的資料來說明.,這是乙個二分類的問題,判斷是不是鳶尾花, 這裡只取前100行的資料,並對訓練集和測試集進行了切分。預設有25個樣本作測試集。
**如下:
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,roc_auc_score, log_loss
from sklearn.model_selection import gridsearchcv
from sklearn import datasets
iris = datasets.load_iris()
data = iris.data[:100]
label = iris.target[:100]
train_x, test_x, train_y, test_y = train_test_split(data, label, random_state=0)
dtrain = xgb.dmatrix(train_x, label=train_y)
dtest = xgb.dmatrix(test_x)
params=
watchlist = [(dtrain, 'train')]
bst = xgb.train(params, dtrain, num_boost_round=10, evals=watchlist)
bst.dump_model('iris_model.txt')
ypred = bst.predict(dtest)
print ypred
ypred_output = bst.predict(dtest, output_margin=true)
print ypred_output
ypred_leaf = bst.predict(dtest, pred_leaf=true)
print ypred_leaf
輸出的結果以及樹結構如下:
首先,predict函式無引數,預設輸出的是概率值。
當設定output_margin=true時,輸出的不是概率值,而是每個樣本在xgboost生成的所有樹中葉子節點的累加值,因為在訓練模型時,objective選擇了logistic,所以用這個累加值做sigmoid就是predict函式無引數時的概率值。如何知道每個樣本在xgboost生成的所有樹中是哪個葉子節點呢?
當設定pred_leaf=true時,會輸出每個樣本在所有樹中的葉子節點
ypred_leaf = bst.predict(dtest, pred_leaf=true)
即測試集有25個樣本,xgboost生成了10棵樹,則樣本在所有樹中的葉子節點對應了乙個(25, 10)的矩陣。例如,第乙個樣本在10棵樹中的葉子節點都是第乙個。第二個樣本在10棵樹中的葉子節點都是第二個。
再看樹結構,共有10個booster,編號0~9,對應10棵樹。對於第乙個booster,當f3<0.75時,分到leaf1,f3>=0.75時,分到leaf2,缺失該特徵,分到leaf1。我們將10棵樹中的leaf1的值全部加起來,即:
-0.0787879-0.0823941-0.0743093-0.0591238-0.0662177-0.0670728-0.068963-0.0610322-0.0576446-0.0599772=-0.6755226
-0.6755226即為葉子節點權重的累加值,在這裡,所有葉子節點的權重已經乘了學習率,對-0.6755226求sigmoid:
1 / float(1 + np.exp(0.6755226)) = 0.337261343368 #這個值跟輸出的概率值是對應的。
殘差即損失函式的導數,而對於均方差square loss function,其導數正好是真實值減**值的相反數,只是殘差的乙個特例而已。
先學習一棵回歸樹,迭代樹時,會把殘差作為目標值,學習下乙個回歸樹,繼續求殘差,直到建立的回歸樹的數目達到一定要求或者殘差能夠容忍,停止學習。
輸出是指,先看各個樣本在所有樹中屬於哪個節點,然後將各個樹中的節點的值累加起來,然後還要乘以學習率才是輸出,即葉子節點權重累加值乘以學習率。然後看objective是分類還是回歸,如果是logistic,則求sigmoid即為概率值。
將輸出值代入loss function,可以求出loss。
然後看objective是分類還是回歸,如果是logistic,則求sigmoid即為概率值。
將輸出值代入loss function,可以求出loss。
xgboost簡單介紹 XGBOOST模型介紹
前言 這是機器學習系列的第三篇文章,對於住房租金 比賽的總結這將是最後一篇文章了,比賽持續乙個月自己的總結竟然也用了乙個月,牽強一點來說機器學習也將會是乙個漫長 的道路,後續機器學習的文章大多數以知識科普為主,畢竟自己在機器學習這個領域是個 渣渣,自己學到的新知識點會分享給大家的。前面的文章談了談這...
使用sklearn訓練xgboost模型
xgboost是提公升樹方法的一種,演算法由gbdt改進而來,在計算時也採用平行計算,速度更快。sklearn中提供分類和回歸的xgboost模型,本文對二分類問題採用xgboost進行訓練。import pandas as pd from sklearn.model selection impor...
22 高階 流行庫模型 XGBoost
coding utf 8 對比隨機決策森林和xgboost模型對鐵達尼號的乘客是否生還的 能力 import pandas as pd titanic pd.read csv 根據分析,我們認為 age,pclass這些特徵都很有可能成為決定倖免與否的決定性因素 x titanic pclass a...