SkLearn Multinomial NB:最具信息性的功能

Ali*_*ice 8 python classification machine-learning scikit-learn text-classification

由于我的分类器在测试数据上的准确率大约为99%,我有点怀疑并希望深入了解我的NB分类器中最具信息性的功能,以了解它正在学习哪种功能.以下主题非常有用:如何获取scikit-learn分类器的大部分信息功能?

至于我的功能输入,我还在玩,目前我正在测试一个简单的unigram模型,使用CountVectorizer:

 vectorizer = CountVectorizer(ngram_range=(1, 1), min_df=2, stop_words='english')
Run Code Online (Sandbox Code Playgroud)

在上述主题中,我发现了以下功能:

def show_most_informative_features(vectorizer, clf, n=20):
feature_names = vectorizer.get_feature_names()
coefs_with_fns = sorted(zip(clf.coef_[0], feature_names))
top = zip(coefs_with_fns[:n], coefs_with_fns[:-(n + 1):-1])
for (coef_1, fn_1), (coef_2, fn_2) in top:
    print "\t%.4f\t%-15s\t\t%.4f\t%-15s" % (coef_1, fn_1, coef_2, fn_2)
Run Code Online (Sandbox Code Playgroud)

这给出了以下结果:

    -16.2420        114th                   -4.0020 said           
    -16.2420        115                     -4.6937 obama          
    -16.2420        136                     -4.8614 house          
    -16.2420        14th                    -5.0194 president      
    -16.2420        15th                    -5.1236 state          
    -16.2420        1600                    -5.1370 senate         
    -16.2420        16th                    -5.3868 new            
    -16.2420        1920                    -5.4004 republicans    
    -16.2420        1961                    -5.4262 republican     
    -16.2420        1981                    -5.5637 democrats      
    -16.2420        19th                    -5.6182 congress       
    -16.2420        1st                     -5.7314 committee      
    -16.2420        31st                    -5.7732 white          
    -16.2420        3rd                     -5.8227 security       
    -16.2420        4th                     -5.8256 states         
    -16.2420        5s                      -5.8530 year           
    -16.2420        61                      -5.9099 government     
    -16.2420        900                     -5.9464 time           
    -16.2420        911                     -5.9984 department     
    -16.2420        97                      -6.0273 gop 
Run Code Online (Sandbox Code Playgroud)

它有效,但我想知道这个函数为了解释结果做了什么.大多数情况下,我都在努力解决'coef_'属性的问题.

我知道左侧是具有最低系数的前20个特征名称,右侧是具有最高系数的特征的右侧.但是这究竟是如何工作的,我该如何解释这个概述呢?这是否意味着左侧为负面类提供了最丰富的信息,右侧是正面类最具信息性的特征?

此外,在左侧看起来好像功能名称按字母顺序排序,这是正确的吗?

ogr*_*sel 8

MultinomialNB的coef_属性是朴素贝叶斯模型作为线性分类器模型的重新参数化.对于二元分类问题,这基本上是给定正类的特征的估计概率的对数.这意味着更高的值意味着积极阶级更重要的特征.

以上打印显示第一列中前20个最低值(预测特征较少)和第二列中前20个高值(最高预测特征).

  • 谢谢!那讲得通.虽然现在我想知道如何为其他班级,负面班级获得最重要的功能? (6认同)
  • `np.array_equal(clf.coef_[0], clf.feature_log_prob_[1])` 返回 `True` 因此我假设 `clf.feature_log_prob_[1])` 给出了负类的特征系数。 (2认同)