【发布时间】:2018-07-26 07:30:31
【问题描述】:
如何找到影响特定样本预测的特征及其贡献,例如第 5 行
更新
感谢@FatihAkici
我现在可以应用 TreeInterpreter
from treeinterpreter import treeinterpreter as ti
instances = X_train.loc[[1,2]]
print(rf.predict(instances))
prediction, biases, contributions = ti.predict(rf, instances)
for i in range(len(instances)):
print ("Instance", i)
print ("Bias (trainset mean)", biases[i])
print ("Feature contributions:")
for c, feature in sorted(zip(contributions[i],
rf.feature_importances_),
key=lambda x: ~abs(x[0].any())):
print (feature, np.round(c, 2))
print ("-"*20 )
print (prediction)
print (biases + np.sum(contributions, axis=1))
我的问题是为什么[ 0.12 -0.12] 有两个似乎是正面和负面的值,而不是那个特征的一个值。这是我的输出
【问题讨论】:
-
首先,
feature_importances_是 RandomForestClassifier 的属性,而不是预测数据的属性。所以不适用于y_pred。其次,获取测试数据的特征重要性没有意义。该模型只能在它所看到的数据中找到特征的重要性(经过训练)。三、第二个问题是什么? -
@Vivek Kumar,你的第二点是我的问题(我会修改问题以反映你的想法),然后我可以训练整个数据集,然后提取该特定点的特征重要性。我正在制定我的第二个问题
-
那么您是说您想知道影响特定样本分类的特征吗?
-
@Victor 每个样本没有一个路径,而是
n_estimators不同的路径 - 每个决策树都有一个路径。据我所知,没有重量。如果这是您想要的,您可以尝试计算每个特征在路径上的分割中使用的频率。 (我不确定这是否可以被视为重要性度量。)Sklearn 不公开此类功能,因此您必须自己实现decision_path功能。 -
你也可以看看lime
标签: python python-3.x python-2.7 machine-learning scikit-learn