当作为输入传递的数据形状(10000,1)时,我无法理解变换数据的形状如何是1 * 1稀疏矩阵 我已经处理了一些原始评论数据。喜欢删除停用词,阻止和删除标点符号。
我在遇到问题的地方需要帮助,如果需要更多详细信息,请告诉我。
答案 0 :(得分: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行单词列表(形状(nrow, 1)
)
但是CountVectorizer
(假设您正在使用sklearn
类)需要一组文档。来自documentation:
CountVectorizer :将文本文档集合转换为令牌计数矩阵
更具体地说,考虑fit()
的参数定义:
raw_documents :一个可生成str,unicode或文件对象的iterable。
如果您只是尝试传递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>
此输出更符合预期输入。