0

我正在对 tf-idf 输入执行 NMF 分解以执行主题分析。

def decomp(tfidfm, topic_count):
    model = decomposition.NMF(init="nndsvd", n_components=topic_count,     max_iter=500)
    H = model.fit_transform(tfidfm)
    W = model.components_
    return W, H

这将返回W,一个由主题到术语分配的模型定义和H,一个文档到主题分配矩阵

到目前为止一切顺利,我可以使用 H 根据它们通过词频与主题列表的关联对文档进行分类,而主题列表又基于它们与词频的关联。

我想将主题术语关联保存到磁盘,以便稍后重新应用它们 - 并采用此处描述的方法 [ https://stackoverflow.com/questions/8955448]来存储 W 的稀疏矩阵表示.

所以我现在想做的是执行相同的过程,只修复主题定义矩阵 W。

在文档中,我似乎可以在调用参数中设置 W 类似的内容:

def applyModel(tfidfm,W,topic_count):
    model = decomposition.NMF(init="nndsvd", n_components=topic_count, max_iter=500)
    H = model.fit_transform(X=tfidfm, W=W)
    W = model.components_
    return W, H

我已经尝试过了,但它似乎不起作用。

我已经通过使用不同大小的词汇表编译 W 矩阵进行了测试,然后将其输入到applyModel函数中,结果矩阵的形状应该由 W 模型定义(或者我应该说,这就是我想要的),但事实并非如此。

这个问题的简短版本是:如何保存从矩阵分解生成的主题模型,以便我可以使用它来分类与最初生成它的文档集不同的文档集?

换句话说,如果V = WH ,那么在给定VW的情况下,我如何返回H

4

2 回答 2

1

初始方程是:初始方程我们解决它是H这样的:如何解决H

这里W的倒数表示矩阵 的逆矩阵,它仅在非奇异W时才存在。W

乘法顺序一如既往地重要。如果有如果订单改变,则需要乘以五相反的倒数W没有说明

于 2016-10-17T17:47:35.277 回答
0

为了完整applyModel起见,这是考虑到 ForceBru 答案的重写函数(使用 import of scipy.sparse.linalg

def applyModel(tfidfm,W):
    H = tfidfm * linalg.inv(W)
    return H

这会根据预先生成的主题模型W和由 tfidf 生成的文档特征矩阵V返回(假设是对齐的词汇表)文档到主题H的映射。

于 2016-10-19T14:33:47.270 回答