在Scikit learn中安装TfidVectorizer和KMeans后,如何进行预测?

2024-06-26 00:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个训练数据集,在熊猫数据框中。我已经完成了TfIdf矢量化以获取特性并运行Kmeans。以下是相关代码:

vectorizer = TfidfVectorizer(max_df=0.8, max_features=max_feat, norm="l1", analyzer="word",
                                 min_df=0.1,ngram_range=(1,2)
                                 )

X = vectorizer.fit_transform(df['reviews'])
km = KMeans(n_clusters=number, init='k-means++', max_iter=100, n_init=3,
                    verbose=1, n_jobs = -2)
km.fit(X)

我可以通过这个得到质心:

^{pr2}$

现在,当我试图运行测试数据时,我得到了错误。这是我为测试数据运行的代码。我基本上是从Panda的测试数据帧中获取每一行,并将其拟合到上面相同的向量器中。我做错了吗?在

sample = df.tail(int(totalTestRows * lineLimit))

for row in sample.itertuples():
    test_data = np.array([row[6]])
    testVectorizerArray = vectorizer.transform(test_data).toarray()
    rowX = vectorizer.fit(testVectorizerArray)
    print(km.predict(rowX))

rowX = vectorizer.fit(testVectorizerArray)行中,我得到以下错误:

AttributeError: 'numpy.ndarray' object has no attribute 'lower'

我搜索了StackOverflow,似乎需要将test_data数组格式化为一维数组。我已经检查并测试数据的格式是(n,)。但是,我还是有错误。我的方法有什么问题吗?在


Tags: 数据代码testdfdatainit错误transform
1条回答
网友
1楼 · 发布于 2024-06-26 00:22:07

您不应该在测试阶段重新安装矢量器,如果您将矢量器和分类器与管道结合起来,您的代码会更干净:

from sklearn.pipeline import make_pipeline
vectorizer = TfidfVectorizer(max_df=0.8, max_features=max_feat, norm="l1", analyzer="word",
                                 min_df=0.1,ngram_range=(1,2)
                                 )   
km = KMeans(n_clusters=number, init='k-means++', max_iter=100, n_init=3,
                    verbose=1, n_jobs = -2)
clf = make_pipeline(vectorizer, km)
clf.fit(X)


sample = df.tail(int(totalTestRows * lineLimit))

for row in sample.itertuples():
    test_data = np.array([row[6]])
    print(clf.predict(test_data))

相关问题 更多 >