我正在研究文本分类问题,并且发现SVM在我的文本分类问题上表现最佳。但是,我使用sklearn的SGD分类器(loss = hinge)进行了实验。
LIME似乎提供了一种分析实例并显示给定实例的每个类的分析的方法。但是,LIME的问题是:
exp = explainer.explain_instance(test_document, c.predict_proba)
在explorer.explain_instance函数中,它要求概率分布作为第二个参数(c.predict_proba),并且没有可用于SGD的predict_proba(loss = hinge)。我曾尝试使用CalibratedClassifierCV,但得到的结果却有所不同。
'=======SGD (loss=hinge)======='
Predicted: [19, 7, 7, 13, 16, 9, 17, 6, 13, 17, 16, 17, 11, 1, 4, 14, 8, 10, 12, 10, 16, 1, 1]
True : [19, 3, 7, 13, 16, 9, 15, 6, 13, 10, 16, 17, 11, 1, 4, 14, 8, 5, 20, 18, 2, 12, 1]
0.6521739130434783
'====Calibrated Results======'
Predicted: [19, 7, 7, 13, 16, 16, 12, 6, 13, 17, 16, 17, 11, 5, 4, 14, 8, 10, 15, 10, 16, 7, 1]
True : [19, 3, 7, 13, 16, 9, 15, 6, 13, 10, 16, 17, 11, 1, 4, 14, 8, 5, 20, 18, 2, 12, 1]
0.5652173913043478
此处的目标是在多类文本分类问题中为每个类找到最相关/最重要的功能。目的是分析结果并在研究论文中讨论它们之间的差异。 开放任何建议或替代方案。
此外,我可以使用sklearn的SVC而不是SGD,因为它具有predict_proba属性。但是,问题在于SGD,我已经有了一组要对其进行分析的参数,我找不到将SGD的配置完全转换为SVC的配置的方法。
答案 0 :(得分:0)
因此我无法使用LIME,但是我找到了LIME的替代方法,称为ELI5 python的库。我将在教程网站上重新创建一个示例,说明如何使用此模块调试机器学习算法。
假设您已经有一个sklearn的clf或estimator对象,该对象适合矢量文本数据:
import eli5
eli5.show_weights(clf, top=10)
上面的代码有效,但是更好的方法是改为提供矢量化器,并让eli5自动找出细节:
#vec is the vectorizer object and
#target_names is the names of the classes to be used
eli5.show_weights(clf, vec=vec, top=10,
target_names=twenty_test.target_names)
要研究分类器如何分配特定类别 show_prediction ,以显示每个类别的分数,以及有助于该分数的热门单词
#second param is the test instance whose prediction you'd like to see.
#vec and target_names are same from show_weights
eli5.show_prediction(clf, twenty_test.data[0], vec=vec,
target_names=twenty_test.target_names)
以下内容只是通过 show_prediction 方法产生的全部输出的一部分。
这正是我在寻找的东西,我想知道为什么以前没有找到它。希望它可以帮助其他人寻找类似的东西。