Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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--SciKit--Classifier的文本特征提取_Python_Python 2.7_Scikit Learn_Text Classification_Naivebayes - Fatal编程技术网

Python--SciKit--Classifier的文本特征提取

Python--SciKit--Classifier的文本特征提取,python,python-2.7,scikit-learn,text-classification,naivebayes,Python,Python 2.7,Scikit Learn,Text Classification,Naivebayes,我必须将文章分类到我的自定义类别中。所以我从SciKit中选择了多项式Nb。我在做监督学习。所以我有一个编辑每天看文章,然后给它们贴标签。一旦他们被标记,我就把它们包括在我的学习模式中等等。下面是了解我在做什么和使用什么的代码。(我不包括任何导入行,因为我只是想让您了解我在做什么)() 现在,我有一个分类后,定制标签准备好,它与新的文章很好地工作,就像一个魅力。现在,需要针对每个类别获取最频繁的单词。简而言之,我必须从学习的模型中提取特征。通过研究,我只发现了如何在学习时提取文本特征 但是一旦学

我必须将文章分类到我的自定义类别中。所以我从SciKit中选择了多项式Nb。我在做监督学习。所以我有一个编辑每天看文章,然后给它们贴标签。一旦他们被标记,我就把它们包括在我的学习模式中等等。下面是了解我在做什么和使用什么的代码。(我不包括任何导入行,因为我只是想让您了解我在做什么)()

现在,我有一个分类后,定制标签准备好,它与新的文章很好地工作,就像一个魅力。现在,需要针对每个类别获取最频繁的单词。简而言之,我必须从学习的模型中提取特征。通过研究,我只发现了如何在学习时提取文本特征

但是一旦学会了,并且我只有模型文件(.pkl),是否可以加载该分类器并从中提取特征


是否有可能获得每个类别或类别的最常用术语?

您可以使用
功能\u计数\u
属性访问功能。这将告诉您特定功能发生了多少次。例如:

# Imports
import numpy as np
from sklearn.naive_bayes import MultinomialNB

# Data
X   = np.random.randint(3, size=(3, 10))
X2  = np.random.randint(3, size=(3, 10))
y   = np.array([1, 2, 3])

# Initial fit
clf = MultinomialNB()
clf.fit(X, y)

# Check to see that the stored features are equal to the input features
print np.all(clf.feature_count_ == X)

# Modify fit with new data
clf.partial_fit(X2, y)

# Check to see that the stored features represents both sets of input
print np.all(clf.feature_count_ == (X + X2))
在上面的示例中,我们可以看到
feature\u count\u
属性只不过是每个类的功能数量的运行总和。使用此功能,您可以从分类器模型返回到功能,以确定功能的频率。不幸的是,您的问题更加复杂,您现在需要再返回一步,因为您的功能不仅仅是文字

这就是坏消息的来源-您使用了
hashingvectorier
功能提取器。如果你提到:

无法计算逆变换(从特征索引到字符串特征名称),这可能是在尝试反思哪些特征对模型最重要时出现的问题

因此,即使我们知道这些特征的频率,我们也无法将这些特征翻译回单词。如果您使用不同类型的功能提取器(可能是同一页面上引用的,
CountVectorizer
),情况将完全不同

简而言之,您可以从模型中提取特征并按类别确定其频率,但无法将这些特征转换回单词


要获得您想要的功能,您需要使用可逆映射功能(一种功能提取器,允许您将单词编码为功能并将功能解码回单词)。

我建议使用以下代码。您只需要加载pickel对象并使用相同的矢量器转换测试数据。如果遇到问题,请尝试使用TFIDF矢量器

clf = joblib.load("'/home/ubuntu/Classifier/Intelligence-MultinomialNB.pkl'")
# you need to read the test sample 
# type (data_test) list of list 

X_test = vectorizer.transform(data_test)
print "pickel model loaded"
print clf
pred = clf.predict(X_test)
print ("prediction done")

for p in enumerate(pred):
    print p 
clf = joblib.load("'/home/ubuntu/Classifier/Intelligence-MultinomialNB.pkl'")
# you need to read the test sample 
# type (data_test) list of list 

X_test = vectorizer.transform(data_test)
print "pickel model loaded"
print clf
pred = clf.predict(X_test)
print ("prediction done")

for p in enumerate(pred):
    print p