2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
首先,你提到在回歸分類(lèi)中預(yù)測(cè)新基因的疾病評(píng)分,你是什么意思?輸出似乎是二進(jìn)制的,0或1,因此這是一個(gè)二進(jìn)制分類(lèi)問(wèn)題。您應(yīng)該改用xgboost's 分類(lèi)器。更新:讓我們根據(jù)評(píng)論假設(shè)一個(gè)回歸問(wèn)題來(lái)模擬您的情況。盡管對(duì)于下面的示例,我們應(yīng)該設(shè)置'objective':'multi:softmax'為輸出實(shí)際標(biāo)簽。
根據(jù)您的問(wèn)題,您似乎要做的就是在那些未正確預(yù)測(cè)的樣本上索引測(cè)試集,并分析誤導(dǎo)性的特征,這具有一定的意義。
讓我們用一些示例數(shù)據(jù)集重現(xiàn)您的問(wèn)題:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import shap
import xgboost
X,y = shap.datasets.iris()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
model = xgboost.train(params={"learning_rate": 0.01},
dtrain=xgboost.DMatrix(X_train, label=y_train),
num_boost_round =100)
使用整個(gè)測(cè)試集的 SHAP 圖非常簡(jiǎn)單。舉個(gè)force_plot例子:
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.initjs()
shap.force_plot(explainer.expected_value, shap_values, X_test)
現(xiàn)在,如果我們想對(duì)錯(cuò)誤分類(lèi)的樣本執(zhí)行相同的操作,我們需要查看輸出概率。由于 iris 數(shù)據(jù)集有多個(gè)類(lèi),假設(shè)我們想要可視化force_plot那些應(yīng)該分類(lèi)為 的樣本2,但我們有一個(gè)輸出值如下1.7:
y_pred = model.predict(xgboost.DMatrix(X_test))
m = (y_pred <= 1.7) & (y_test == 2)
現(xiàn)在我們使用掩碼對(duì)集合執(zhí)行布爾索引X_test,并更新shap_values:
shap.initjs()
c= explainer.shap_values(X_test[m])
shap.force_plot(explainer.expected_value, shap_values, X_test[m])
這告訴我們,花瓣的長(zhǎng)度和寬度主要將回歸推向更高的值。因此,它們可能是在錯(cuò)誤分類(lèi)中發(fā)揮主要作用的變量。
同樣,對(duì)于一個(gè)decision_plot:
shap.decision_plot(explainer.expected_value, shap_values,
X_test[m], feature_order='hclust',
return_objects=True)

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
由于我沒(méi)有您的數(shù)據(jù)集,因此無(wú)法檢查代碼,但這里的一些想法可能會(huì)為您指明方向。
看來(lái)你沒(méi)有訓(xùn)練你的回歸者。應(yīng)該是像線(xiàn)一樣
xgbr = xgboost.XGBRegressor()
xgbr.train(X, Y)
現(xiàn)在你可以使用了xgbr.predict(X);)
您還需要培訓(xùn)解釋員:
explainer = shap.TreeExplainer(xgbr)
with warnings.catch_warnings():
warnings.simplefilter("ignore")
sh = explainer.shap_values(X)
現(xiàn)在您可以選擇值:
misclassified = (y_pred <= 0.7) & (Y == 1)
shap.decision_plot(expected_value, sh, features_display, link='logit', highlight=misclassified)
在使用之前,shap我建議您檢查回歸器對(duì)數(shù)據(jù)的擬合程度。因此,為此我建議您將部分?jǐn)?shù)據(jù)用于測(cè)試,而不是在訓(xùn)練中使用它。然后,您可以通過(guò)計(jì)算和比較測(cè)試集和訓(xùn)練集的 MSE 來(lái)評(píng)估擬合優(yōu)度。差異越大,預(yù)測(cè)器的表現(xiàn)就越差。
添加回答
舉報(bào)