2016-11-24 61 views
2

我正在使用Python的sklearn文本分类。所使用的分类是MultinomialNB和我一起报纸文章喂它用类,如体育,经济等sklearn:如何找出哪些功能负责预测标签?

训练模型后,我用predictpredict_proba功能来测试我的模型一些选定的文本。但有时候会出现非常令人惊讶的结果,我想找出为什么意味着我特别想知道哪些特征对结果有影响,以及影响了多少 - 理解预测。有没有办法做到这一点?

+0

是否feature_log_prob_和coef_不是您要查找的内容?第一个是给定类的特征的经验对数概率P(x_i | y),而另一个将这些数转换为线性模型。 –

+0

@LukaszTracewski请参阅https://github.com/scikit-learn/scikit-learn/issues/2237 –

回答

3

我们最近发布了一个包(https://github.com/TeamHG-Memex/eli5),它允许检查功能;它支持许多scikit-learn分类器,但不支持MultinomialNB(这在计划中)。如果您确定使用另一个分类器,请检查tutorial

如果你想要MultinomialNB,那么你可以等到支持,帮助,或使用通用的解释方法,如LIME。 eli5有一个实验LIME implementation;还有一个来自LIME作者的热门软件包:https://github.com/marcotcr/lime

对不起,这不是一个真正的答案,因为正确的答案是检查MultinomialNB系数并将它们映射回特征;因为scikit-learn 0.18 MultinomialNB虽然有一些问题(https://github.com/scikit-learn/scikit-learn/issues/2237),所以它应该谨慎地做(并为eli5:D做出贡献)。

+0

不回答这个问题,但真的有用 - 谢谢! –

+0

谢谢你的(有帮助)答案。我已将分类符更改为** LogisticRegression **并尝试使用''eli5''的''show_prediction'' /''explain_predition''函数。第二个参数是''doc'',并且我传递了一个文本作为参数。但是我得到''X每个样本有1个特征;期待1019'' ...在教程中,他们只传递文本,而不是特征向量。那么那里有什么?也许还有第二个问题:你知道权重的数学基础吗?他们如何计算? – ScientiaEtVeritas

+0

@ScientiaEtVeritas将文本传递给eli5.show_prediction应该也可以,如果你还传递向量。至于Logistic回归,请参阅scikit学习有关该文档:http://scikit-learn.org/stable/modules/linear_model.html#logistic-regression - 此页面上有一些链接;维基百科也有一篇关于逻辑回归的文章(https://en.wikipedia.org/wiki/Logistic_regression)。我不确定我可以用一种有用的方法在一个简短的评论中解释它:) –