当作为输入传递的数据的形状为 (10000,1) 时,我无法理解转换后的数据的形状如何是 1*1 稀疏矩阵。我对原始评论数据进行了一些处理。就像删除停用词、词干和删除标点符号一样。
我需要关于哪里出错的帮助,如果需要更多详细信息来查找问题,请告诉我。
当作为输入传递的数据的形状为 (10000,1) 时,我无法理解转换后的数据的形状如何是 1*1 稀疏矩阵。我对原始评论数据进行了一些处理。就像删除停用词、词干和删除标点符号一样。
我需要关于哪里出错的帮助,如果需要更多详细信息来查找问题,请告诉我。
根据屏幕截图的格式,它看起来X_train1
实际上是一个 Pandas 数据框。问题在于这Description
是一列单词列表(可能长度不等)。像这样的东西:
X = np.array([['alpha','beta'],['theta','theta','gamma'],['delta','delta']])
X_train1 = pd.DataFrame(X, columns=["Description"])
X_train1
Description
0 [alpha, beta]
1 [theta, theta, gamma]
2 [delta, delta]
X_train1.shape # (3,1)
因此,您有 10,000 行单词列表(带有 shape (nrow, 1)
)。
但是CountVectorizer
(假设您正在使用sklearn
该类)需要一组文档。从文档中:
CountVectorizer:将文本文档集合转换为令牌计数矩阵
更具体地说,考虑参数定义为fit()
:
raw_documents:一个产生 str、unicode 或文件对象的迭代。
如果您只是尝试并传入X_train1
,则您没有提供预期的输入 - 您正在传入一个数据框,其中包含一个包含字符串列表对象的列。你应该期望得到奇怪的输出。
假设中的每一行X_train1
代表一个文档,尝试在每一行加入单词列表,然后传递给CountVectorizer
:
X = X_train1.Description.apply(lambda row: ' '.join(row))
ctvec = CountVectorizer()
ctvec.fit_transform(X) # combine fit(X) and transform(X)
输出:
<3x5 sparse matrix of type '<class 'numpy.int64'>'
with 5 stored elements in Compressed Sparse Row format>
该输出更符合预期输入。