我正在使用 RandomForestClassifier 模型,我想使用 Shapley 值來解釋它。資料(包含 150 個特征)首先通過 PCA 選擇器運行,將其轉換為 3 個新特征,然后將這些選擇的縮減資料提供給 RandomForestClassifier 模型。然后將該模型提供給 shap.Explainer()。問題是,我希望 shap 解釋具有原始 150 個特征的模型,而不是 3 個 pca 組件。因此我用原始資料呼叫了 shap.Explainer() :
#the selector:
fs_all_pca = PCA(n_components=3).fit(X)
X_all_pca = fs_all_pca.transform(X)
#the model:
model = RandomForestClassifier(max_depth=5, min_samples_split=4, n_estimators=200, min_samples_leaf=3, class_weight=class_weights)
model.fit(X_all_pca, y)
#explain with shap:
explainer = shap.Explainer(model.predict, X)
shap_values = explainer(X)
但是我收到此錯誤:
raise ValueError(
ValueError: X has 150 features, but RandomForestClassifier is expecting 3 features as input.
有沒有辦法在原始資料通過 pca 選擇階段之前為 pca 模型運行 shapley?
uj5u.com熱心網友回復:
您正在適應model具有X_all_pca3 個功能:
fs_all_pca = PCA(n_components=3).fit(X)
X_all_pca = fs_all_pca.transform(X)
model.fit(X_all_pca, y)
但是,當您預測要提供所有功能時:
explainer = shap.Explainer(model.predict, X)
因此你的錯誤資訊。
它必須或多或少:
explainer = shap.Explainer(model.predict, X_all_pca)
如果您出于某種原因想要對所有功能進行分析(為什么要進行 PCA 呢???),做一個管道并通過它KernelExplainer
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/508271.html
上一篇:如何n次訓練K最近鄰(Knn)?
