我在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的稀疏矩阵重复表示。 / p>
所以我现在要做的是执行相同的过程,只修复主题定义矩阵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 ,那么如果 V ,我该如何返回 H 的 w ^
答案 0 :(得分:1)
初始等式为:我们为解决此问题:。
此处表示矩阵的倒数,仅当为非奇异时才存在。
乘法顺序一如既往地很重要。如果您有,则需要将乘以的倒数乘以。
答案 1 :(得分:0)
为了完整性,这里是重写的applyModel
函数,它考虑了ForceBru的答案(使用导入scipy.sparse.linalg
)
def applyModel(tfidfm,W):
H = tfidfm * linalg.inv(W)
return H
基于预生成的主题模型 W 和文档特征矩阵 V >返回(假设对齐的词汇表)文档到主题 H 的映射strong>由tfidf生成。