gensim 使用之二 从gensim到sklearn的格式转换

从gensim到sklearn的格式转换

一个很尴尬的问题是,gensim中的corpus数据格式,sklearn是无法识别的。即gensim中对向量的表示形式与sklearn要求的不符。
在gensim中,向量是稀疏表示的。例如[(0,5),(6,3)] 意思就是说,该向量的第0个元素值为5,第6个元素值为3,其他为0.但是这种表示方式sklearn是无法识别的。sklearn的输入一般是与numpy或者scipy配套的。如果是密集矩阵,就需要输入numpy.array格式的; 如果是稀疏矩阵,则需要输入scipy.sparse.csr_matrix.由于后者可以转化成前者,而且gensim中向量本身就是稀疏表示,所以这边只讲如何将gensim中的corpus格式转化成csr_matrix.

官网给出的五个方法如图。

import numpy as np
from pprint import pprint
import scipy.sparse as sc
'''
第一种是由现有的密集矩阵来构建稀疏矩阵,第二种不是很清楚,第三种构建一个空矩阵。第四种和第五种符合我们的要求。
其中第四种最为直观,构建三个数组,分别存储每个元素的行,列和数值即可。
官网给出的示例代码如下,还是比较直观的。
'''
row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6])
pprint(sc.csr_matrix((data, (row, col)), shape=(3, 3)).toarray())
'''
依样画葫芦,gensim转化到csr_matrix的程序可以写成
'''
data = []
rows = []
cols = []
line_count = 0
for line in lsi_corpus: # lsi_corpus_total 是之前由gensim生成的lsi向量
    for elem in line:
        rows.append(line_count)
        cols.append(elem[0])
        data.append(elem[1]) line_count += 1
lsi_sparse_matrix = sc.csr_matrix((data,(rows,cols))) # 稀疏向量
lsi_matrix = lsi_sparse_matrix.toarray() # 密集向量

猜你喜欢

转载自blog.csdn.net/qq_34333481/article/details/85014861