El_*_*rón 3 python scipy sparse-matrix
我开始处理稀疏矩阵,所以我对这个主题并不十分精通.我的问题是,我从单词列表中得到一个简单的合并矩阵,只是一个二维共生矩阵,逐字逐字计算一个单词在同一个上下文中出现的次数.由于语料库不是很大,所以矩阵非常稀疏.我想将它转换为稀疏矩阵,以便能够更好地处理它,最后做一些矩阵乘法.这是我到目前为止所做的事情(只有第一部分,其余部分只是输出格式和清洁数据):
def matrix(from_corpus):
d = defaultdict(lambda : defaultdict(int))
heads = set()
trans = set()
for text in corpus:
d[text[0]][text[1]] += 1
heads.add(text[0])
trans.add(text[1])
return d,heads,trans
Run Code Online (Sandbox Code Playgroud)
我的想法是创建一个新功能:
def matrix_to_sparse(d):
A = sparse.lil_matrix(d)
Run Code Online (Sandbox Code Playgroud)
这有意义吗?然而,这不起作用,不知道我怎么没有获得稀疏矩阵的方式.我应该更好地使用numpy数组吗?什么是最好的方法来做到这一点.我想比较许多处理矩阵的方法.
如果有人能让我朝着这个方向前进,那就太好了.
以下是如何A使用SciPy的COO格式从一组文档构建文档术语矩阵,这是易用性和效率之间的良好折衷(*):
vocabulary = {} # map terms to column indices
data = [] # values (maybe weights)
row = [] # row (document) indices
col = [] # column (term) indices
for i, doc in enumerate(documents):
for term in doc:
# get column index, adding the term to the vocabulary if needed
j = vocabulary.setdefault(term, len(vocabulary))
data.append(1) # uniform weights
row.append(i)
col.append(j)
A = scipy.sparse.coo_matrix((data, (row, col)))
Run Code Online (Sandbox Code Playgroud)
现在,要获得一个共生矩阵:
A.T * A
Run Code Online (Sandbox Code Playgroud)
(忽略对角线,它保持术语与自身同时发生,即平方频率).
或者,使用一些为你做这种事情的包,比如Gensim或scikit-learn.(我是这两个项目的贡献者,所以这可能不是公正的建议.)
| 归档时间: |
|
| 查看次数: |
2714 次 |
| 最近记录: |