文本分析中训练和测试矩阵的相同维度? [复制]

Posted

技术标签:

【中文标题】文本分析中训练和测试矩阵的相同维度? [复制]【英文标题】:Identical dimensions for train and test matrices in text analysis? [duplicate] 【发布时间】:2017-01-03 08:31:10 【问题描述】:

假设我有一个包含不同文本行的数据框,我想对这些行进行聚类以找出数据中的潜在主题:

import pandas as pd
df = pd.DataFrame("id_num": np.random.randint(low = 0, high = 50, size = 10), "text": ["hello these are words i would like to cluster", "hello i would like to go home", "home i would like to go please thank you", "thank you please apple banana", "orange banana apple fruit corn", "orange orange orange banana banana banana banana", "can you take me home i have had enough of this place", "i am bored can we go home", "i would like to leave now to go home", "apple apple banana"])

我先把这个dataframe分成traintest

>>> from sklearn.cross_validation import train_test_split
>>> train, test = train_test_split(df, test_size = 0.40)
>>> train, test = train["text"], test["text"]

然后开始聚类过程:

>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> from sklearn.cluster import KMeans

>>> vectorizer = TfidfVectorizer()

>>> train_X = vectorizer.fit_transform(train)
>>> test_X = vectorizer.fit_transform(test)

>>> model = KMeans(n_clusters = 2)

>>> model.fit(train_X)

>>> model.predict(test_X)

ValueError: Incorrect number of features. Got 22 features, expected 18.

当然,如果您在自己的机器上运行此代码,您可能会得到不同的结果。也许特征的数量甚至可能是一致的。但在大多数情况下,train_Xtest_X 的尺寸不会匹配。

还有其他人处理过这个问题吗?我想使维度相等的一种方法是通过仅采用traintest 中存在的特征(阅读:单词)来进行某种降维。另一种会产生更大矩阵的解决方案是在给定文档没有来自其他语料库的单词的两个矩阵中填充零。

我还有其他方法可以解决这个问题吗?

【问题讨论】:

【参考方案1】:

经过一番挖掘,我找到了几个 *** 对同一问题的答案:Python vectorization for classification 和 Scikit learn - fit_transform on the test set。

简而言之,我需要改变

train_X = vectorizer.fit_transform(train)
test_X = vectorizer.fit_transform(test)

train_X = vectorizer.fit_transform(train)
test_X = vectorizer.transform(test)

使用transform 代替fit_transform 可以保留上一行中从fit_transform 创建的词汇表,并确保这些矩阵的列相同。

【讨论】:

因为是重复的,所以不给出答案,只是将问题标记为重复。

以上是关于文本分析中训练和测试矩阵的相同维度? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将输入测试数据更改为特征矩阵的维度

SelectFromModel scikit-learn:训练和测试阶段生成的特征矩阵维度

来自文本文件的矩阵的维度

如何使用新(测试)数据重新创建相同的 DocumentTermMatrix

长文本摘要模型的位置编码

用于分类的 Python 矢量化 [重复]