由于我的分类器在测试数据上的准确率约为99%,我有些怀疑并希望了解NB分类器最具信息量的特征,以查看它正在学习哪种特征。以下主题非常有用:如何获取scikit-learn分类器的最具信息量的特征?
至于我的特征输入,我仍在尝试中,目前正在使用CountVectorizer测试简单的一元模型:
以下是结果:
它能用,但我想知道这个函数的作用以便解释结果。我主要是对“coef_”属性的作用感到困惑。
我知道左边是最小系数的前20个特征名称,右边是最大系数的特征。但具体是如何工作的,我该如何解释这个概述呢?这是否意味着左边包含了负类别最具信息量的特征,右边包含了正类别最具信息量的特征?
此外,在左侧看起来好像特征名称是按字母顺序排序的,这是正确的吗?
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个特征名称,右边是最大系数的特征。但具体是如何工作的,我该如何解释这个概述呢?这是否意味着左边包含了负类别最具信息量的特征,右边包含了正类别最具信息量的特征?
此外,在左侧看起来好像特征名称是按字母顺序排序的,这是正确的吗?
np.array_equal(clf.coef_[0], clf.feature_log_prob_[1])
返回True
,因此我认为clf.feature_log_prob_[1]
给出了负类的特征系数。 - Despe1990