使用负值的 NMF

Posted

技术标签:

【中文标题】使用负值的 NMF【英文标题】:Using NMF with negative value 【发布时间】:2016-11-16 08:28:44 【问题描述】:

当我们有一个负值的数据集时,我们可以应用非负矩阵分解吗? 如果是,怎么做?

【问题讨论】:

【参考方案1】:

如果您使用的是 R:

nneg.data.matrix <- nneg(data.matrix)

nneg.data.matrix < 0

额外的参数“方法”选择是:

pmax - 每个条目都被限制在阈值阈值以上。

posneg - 矩阵分为“正”和“负”部分,每个部分的条目都限制在阈值阈值以上。结果包括将这两部分堆叠成行(即 rbind-ed)成一个矩阵,该矩阵的行数是输入矩阵对象的两倍。

absolute - 每个条目的绝对值被限制在阈值阈值以上。

min - 通过将最小条目添加到每个条目的全局移位,仅当它为负时,然后应用阈值。

【讨论】:

【参考方案2】:

您可以将数据框的最小值添加到整个单元格以使其非负

set.seed(1)
x <- rmatrix(5,5, rnorm, mean=0, sd=5)
x
 

           [,1]      [,2]       [,3]        [,4]       [,5]
[1,] -3.1322691 -4.102342   7.558906 -0.22466805  4.5948869
[2,]  0.9182166  2.437145   1.949216 -0.08095132  3.9106815
[3,] -4.1781431  3.691624  -3.106203  4.71918105  0.3728249
[4,]  7.9764040  2.878907 -11.073499  4.10610598 -9.9467585
[5,]  1.6475389 -1.526942   5.624655  2.96950661  3.0991287

nneg(x, method='min')

          [,1]      [,2]      [,3]     [,4]      [,5]
[1,]  7.941230  6.971158 18.632405 10.84883 15.668386
[2,] 11.991716 13.510645 13.022716 10.99255 14.984181
[3,]  6.895356 14.765123  7.967297 15.79268 11.446324
[4,] 19.049903 13.952406  0.000000 15.17961  1.126741
[5,] 12.721038  9.546558 16.698154 14.04301 14.172628

【讨论】:

以上是关于使用负值的 NMF的主要内容,如果未能解决你的问题,请参考以下文章

文本主题模型之非负矩阵分解(NMF)

如何比较 PCA 和 NMF 的预测能力

如何处理python scikit NMF中的缺失值

语义分析

SVD(奇异值分解)+NMF(非负矩阵分解)

NMF(非负矩阵分解)