您好我正在使用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
答案 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)