如何使用相同的词汇表来矢量化新评论?

时间:2016-12-14 00:07:56

标签: scikit-learn

您好我正在使用sklearn我有一个如下所示的列表:

list = ["comment1","comment2",...,"commentN"]

然后我建立了一个矢量化器来构建一个矩阵,

tf_vectorizer = CountVectorizer(max_df=0.95, min_df=2,
                                max_features=n_features,stop_words=stpw)

我使用fit_transform来矢量化这个列表

tf = tf_vectorizer.fit_transform(list)

我建立了8个数据集,

kmeans = KMeans(n_clusters=8, random_state=0).fit(tf)

最后我使用名为predict的方法为每个向量生成标签

y_pred = kmeans.predict(tf)

现在我有一个新的评论,我想与我的previos数据集群相关联,

comment = ["newComment"]

我试过,首先将评论矢量化,然后使用预测如下:

newVec = CountVectorizer(vocabulary=tf.vocabulary_)

testComment = newVec.fit_transform(comment)
y_pred_Comment = kmeans.predict(comment)

print(y_pred_Comment)

问题是我收到错误,因为这个名为newVec的新矢量化器并没有占用我所有的流行词汇, 我想感谢帮助矢量化我的新评论,但使用之前由tf_vectorizer.fit_transform(list)生成的相同模型,

错误相关:

<ipython-input-32-69c8879d551a> in <module>()
    129 
    130 
--> 131 newVec = CountVectorizer(vocabulary=tf.vocabulary_)
    132 
    133 comment = ["newComment"]

C:\Program Files\Anaconda3\lib\site-packages\scipy\sparse\base.py in __getattr__(self, attr)
    557             return self.getnnz()
    558         else:
--> 559             raise AttributeError(attr + " not found")
    560 
    561     def transpose(self, axes=None, copy=False):

AttributeError: vocabulary_ not found

1 个答案:

答案 0 :(得分:3)

我认为您对scikit中模型的使用方式产生了轻微的误解。您希望在训练集上训练模型,然后将相同的模型应用于测试集。所以在你的例子中(但改为使用新闻组数据)

from sklearn import datasets, feature_extraction, neighbors, cluster

newsgroups_train = datasets.fetch_20newsgroups(subset='train').data[:200]
newsgroups_test = datasets.fetch_20newsgroups(subset='test').data[:100]

tf_vectorizer = feature_extraction.text.CountVectorizer()
tf_train = tf_vectorizer.fit_transform(newsgroups_train)

kmeans = cluster.KMeans(n_clusters=8, random_state=0).fit(tf)
y_pred = kmeans.predict(tf_train)

现在我们有了一个矢量化器和一个聚类模型,我们可以将它应用于新数据。

tf_test = tf_vectorizer.transform(newsgroups_test)
y_pred_test = kmeans.predict(tf_test)