我刚开始使用shap,所以我仍在努力理解它。基本上,我有一个简单的sklearn.ensemble.RandomForestClassifier使用model.fit(X_train,y_train),等等。训练后,我想获得 Shap 值来解释对未见数据的预测。根据文档和其他教程,这似乎是要走的路:
explainer = shap.Explainer(model.predict, X_train)
shap_values = explainer.shap_values(X_test)
Run Code Online (Sandbox Code Playgroud)
然而,这需要很长时间才能运行(我的数据大约需要 18 小时)。如果我将第一行中的 替换为,即model.predict:model
explainer = shap.Explainer(model, X_train)
shap_values = explainer.shap_values(X_test)
Run Code Online (Sandbox Code Playgroud)
它显着缩短了运行时间(减少至约 40 分钟)。所以这让我想知道在第二种情况下我实际上得到了什么?
重申一下,我只是想能够解释新的预测,而且对我来说这似乎很奇怪,它会如此昂贵 - 所以我确信我做错了什么。