SkLearn多项式NB:最具信息性的功能



由于我的分类器在测试数据上的准确率约为99%,我有点怀疑,希望深入了解NB分类器中信息量最大的特征,看看它正在学习什么样的特征。以下主题非常有用:如何获得scikit学习分类器的信息量最大的功能?

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

vectorizer = CountVectorizer(ngram_range=(1, 1), min_df=2, stop_words='english')

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

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%.4ft%-15stt%.4ft%-15s" % (coef_1, fn_1, coef_2, fn_2)

得出以下结果:

-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 

它是有效的,但我想知道这个函数做什么来解释结果。大多数情况下,我很难理解"coeff_"属性的作用。

我知道左边是系数最低的前20个特征名称,右边是系数最高的特征。但这究竟是如何运作的,我该如何解读这一概述?这是否意味着左侧拥有消极类的信息最多的特征,右侧拥有积极类的信息最丰富的特征?

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

多项式NB的coeff_属性是作为线性分类器模型的朴素贝叶斯模型的重新参数化。对于二进制分类问题,这基本上是给定正类的特征的估计概率的对数。这意味着更高的值意味着积极类具有更重要的特征。

上面的打印在第一列中显示了前20个最低值(较少预测特征),在第二列中显示前20个高值(最高预测特征)。

coef_属性中显示的数字是概率的对数。对于每个预测特征,所有这些概率的总和将等于1,并且coef_属性的长度等于预测特征的数量。要亲自检查,您可以使用以下列表理解:

sum([np.exp(1)**x for x in clf.coef_[0]])  # The sum of probabilities == 1

此外,为了回答@LN_p的注释,.classes_属性将显示查看coef_阵列时引用的特征的顺序。

这是我遇到的一个类似的帖子:如何在naive_bayes多项式NB 中计算feature_log_prob_

相关内容

  • 没有找到相关文章

最新更新