Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SkLearn多项式NB:信息量最大的功能_Python_Machine Learning_Scikit Learn_Classification_Text Classification - Fatal编程技术网

Python SkLearn多项式NB:信息量最大的功能

Python SkLearn多项式NB:信息量最大的功能,python,machine-learning,scikit-learn,classification,text-classification,Python,Machine Learning,Scikit Learn,Classification,Text Classification,由于我的分类器对测试数据的准确率约为99%,我有点怀疑,希望深入了解我的NB分类器中信息量最大的特征,看看它在学习什么样的特征。以下主题非常有用: 至于我的功能输入,我还在玩,目前我正在测试一个简单的unigram模型,使用CountVectorizer: vectorizer = CountVectorizer(ngram_range=(1, 1), min_df=2, stop_words='english') 在上述主题中,我发现了以下功能: def show_most_informa

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

至于我的功能输入,我还在玩,目前我正在测试一个简单的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%.4f\t%-15s\t\t%.4f\t%-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 
它是有效的,但我想知道这个函数是如何解释结果的。大多数情况下,我都很难理解“coef_”属性的作用

我知道左边是系数最低的前20个特征名称,右边是系数最高的特征名称。但这到底是如何工作的,我如何解释这个概述?这是否意味着左边是负面类信息量最大的特征,右边是正面类信息量最大的特征


另外,在左侧,功能名称似乎是按字母顺序排序的,对吗

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


上图在第一列显示了前20个最低值(预测性较小的特征),在第二列显示了前20个最高值(预测性最强的特征)。属性中显示的数字是概率的日志。对于每个预测特征,所有这些概率的总和将等于1,并且
coef_uu
属性的长度等于预测特征的数量。要亲自检查,您可以使用以下列表:

sum([np.exp(1)**x for x in clf.coef_[0]])  # The sum of probabilities == 1
另外,要回答@LN\u p的评论,查看
coef\uu
数组时,
.classes\u
属性将显示引用的功能的顺序

下面是我遇到的一个类似帖子:

谢谢!这是有道理的。虽然现在我想知道如何为另一个类负类获得最重要的特征?
np.array_equal(clf.coef_[0],clf.feature_log_prob[1])
返回
True
因此我假设
clf.feature_log_prob[1])
给出负类的特征系数。我有两个类:array([0,1])。当我调用coef_u0时,它会给出正类(1)或负类(0)的系数吗?