【发布时间】:2017-01-18 19:56:33
【问题描述】:
我有两个 CSV 文件 - 训练和测试,每个文件有 18000 条评论。我需要使用训练文件进行特征提取并计算训练文件中的每条评论与测试文件中的每条评论之间的相似度度量。
我根据训练集和测试集中的单词生成了一个词汇表 - 我删除了停用词,但没有删除错别字和词干。
我面临的问题是 - 我不知道如何使用 TfIdfVectorizer 的输出来生成训练数据和测试数据之间的余弦相似度。
这是适合我的火车数据到vocabulary的代码sn-p:
vect = TfidfVectorizer(sublinear_tf=True, min_df=0.5, vocabulary=vocabulary)
X = vect.fit_transform(train_list)
vocab = vect.get_feature_names()
# train_matrix = X.todense()
train_idf = vect.idf_
print vocab
print X.todense()
我从 X.todense() 得到的输出是
[[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
...,
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 0.]]
如果我只是打印 X,它看起来像这样:
(0, 28137) 0.114440020953
(0, 27547) 0.238913278498
(0, 26519) 0.14777362826
(0, 26297) 0.247716207254
(0, 26118) 0.178776605168
(0, 26032) 0.15139993147
(0, 25771) 0.10334152493
(0, 25559) 0.157584788446
(0, 25542) 0.0909693864147
(0, 25538) 0.179738937276
(0, 21762) 0.112899547719
(0, 21471) 0.159940534946
(0, 21001) 0.0931693893501
(0, 13960) 0.134069984961
(0, 12535) 0.198190713402
(0, 11918) 0.142570540903
: :
(18505, 18173) 0.237810781785
(18505, 17418) 0.233931974117
(18505, 17412) 0.129587180209
(18505, 17017) 0.130917070234
(18505, 17014) 0.137794139419
(18505, 15943) 0.130040669343
(18505, 15837) 0.0790013472346
(18505, 11865) 0.158061557865
(18505, 10896) 0.0708161593204
(18505, 10698) 0.0846731116968
(18505, 10516) 0.116681527108
(18505, 8668) 0.122364898181
(18505, 7956) 0.174450779875
(18505, 1111) 0.191477939381
(18505, 73) 0.257945257626
我不知道如何读取 X.todense() 的输出或打印 X,我不确定如何找到测试集和训练集之间的余弦距离(可能使用成对相似性?-http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html ?)
编辑:
我对测试数据重复了相同的步骤。
现在我有两个 scipy.sparse.csr.csr_matrix 类型的稀疏矩阵 X 和 Y - 但由于它们都是稀疏矩阵和 (doc, term) tf-idf 类型,我无法通过直接乘法直接得到 X 和 Y 之间的余弦相似度。
使用 todense() 转换 X 和 Y 会出现 MemoryError - 这意味着它效率低下。
接下来我该怎么做?
我需要得到某种尺寸为 18000 * 18000 的成对余弦相似度的矩阵或稀疏矩阵,但我不知道该怎么做。
这是家庭作业,在这个阶段阅读 sklearn 文档对我没有任何帮助。
【问题讨论】:
标签: python numpy scikit-learn sparse-matrix tf-idf