使用保存的 W 矩阵应用矩阵分解进行分类
Applying a matrix decomposition for classification using a saved W matrix
我正在对 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
This returns W,一个由主题到术语分配的模型定义,以及 H,一个文档主题分配矩阵
到目前为止一切顺利,我可以使用 H 根据文档通过词频与主题列表的关联对文档进行分类,而主题列表又基于它们与词频的关联。
我想将主题术语关联保存到磁盘,以便稍后重新应用它们 - 并采用此处描述的方法[ 来存储 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,那我怎么returnH,给定 V 和 W?
初始方程是:,我们这样求解 :.
此处表示矩阵的逆矩阵,仅当为非奇异矩阵时才存在。
乘法顺序一如既往地重要。如果您有 ,则需要将 乘以 的倒数:.
为了完整性,这里是重写的 applyModel
函数,它考虑了 ForceBru 的答案(使用 scipy.sparse.linalg
的导入)
def applyModel(tfidfm,W):
H = tfidfm * linalg.inv(W)
return H
这 returns(假设词汇表对齐)文档到主题的映射 H 基于预生成的主题模型 W 和由 tfidf.
生成的文档特征矩阵 V
我正在对 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
This returns W,一个由主题到术语分配的模型定义,以及 H,一个文档主题分配矩阵
到目前为止一切顺利,我可以使用 H 根据文档通过词频与主题列表的关联对文档进行分类,而主题列表又基于它们与词频的关联。
我想将主题术语关联保存到磁盘,以便稍后重新应用它们 - 并采用此处描述的方法[ 来存储 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,那我怎么returnH,给定 V 和 W?
初始方程是:
此处
乘法顺序一如既往地重要。如果您有
为了完整性,这里是重写的 applyModel
函数,它考虑了 ForceBru 的答案(使用 scipy.sparse.linalg
的导入)
def applyModel(tfidfm,W):
H = tfidfm * linalg.inv(W)
return H
这 returns(假设词汇表对齐)文档到主题的映射 H 基于预生成的主题模型 W 和由 tfidf.
生成的文档特征矩阵 V