在 Scikit 学习中拟合 TfidfVectorizer 和 KMeans 后如何进行预测?
How do I do prediction after fitting TfidfVectorizer and KMeans in Scikit learn?
我有一个训练数据集,它在 Pandas Dataframe 中。我已经完成了 TfIdf Vectorization 以获得功能和 运行 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)
我可以通过这个得到质心:
order_centroids = km.cluster_centers_.argsort()[:, ::-1]
现在,当我尝试 运行 测试数据时出现错误。这是我 运行ning 用于测试数据的代码。我基本上是从 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'
我通过 Whosebug 进行了搜索,似乎我需要将 test_data
数组格式化为一维数组。我检查过 test_data 的格式是 (n,)
。但是,我仍然遇到错误。我的做法有什么问题吗?
您不应该在测试阶段改装矢量化器,如果您将矢量化器和分类器与管道结合使用,您的代码会更清晰:
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))
我有一个训练数据集,它在 Pandas Dataframe 中。我已经完成了 TfIdf Vectorization 以获得功能和 运行 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)
我可以通过这个得到质心:
order_centroids = km.cluster_centers_.argsort()[:, ::-1]
现在,当我尝试 运行 测试数据时出现错误。这是我 运行ning 用于测试数据的代码。我基本上是从 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'
我通过 Whosebug 进行了搜索,似乎我需要将 test_data
数组格式化为一维数组。我检查过 test_data 的格式是 (n,)
。但是,我仍然遇到错误。我的做法有什么问题吗?
您不应该在测试阶段改装矢量化器,如果您将矢量化器和分类器与管道结合使用,您的代码会更清晰:
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))