主要内容

NNMF

非负矩阵分解

描述

例子

[[w,,,,H] = nnmf(一个,,,,k因素n-经过-m矩阵一个成为非负因素w((n-经过-k) 和H((k-经过-m)。分解不是精确的;w*H是较低的近似一个。这factorswH最小化均方根残差d之间一个w*H

d = norm(a -w*h,“来回”)/sqrt(n*m)

分解使用迭代算法,从随机初始值开始wH。因为根平方残留d可能具有局部最小值,重复因素可能会产生不同的wH。有时,算法会收敛到等级的解决方案k,这可以表明结果不是最佳的。

例子

[[w,,,,H] = nnmf(一个,,,,k,,,,名称,价值使用一个或多个名称值对参数修改分解。例如,您可以通过设置请求重复因素化“重复”整数值大于1。

[[w,,,,H,,,,d] = nnmf(___还返回均方根残差d使用上一个语法中的任何输入参数组合。

例子

全部收缩

加载样本数据。

加载渔业

计算Fisher虹膜数据中四个变量的测量值的非负级别两个近似。

RNG(1)%可再现性[W,H] = NNMF(MES,2);H
h =2×40.6945 0.2856 0.6220 0.2218 0.8020 0.5683 0.1834 0.0149

第一个和第三个变量meas(分别为0.6945和0.6220的萼片长度和瓣长度,分别为0.6945和0.6220)为第一列提供了相对较强的权重w。第一个和第二个变量meas(分别为0.8020和0.5683的萼片长度和萼片宽度)为第二列提供了相对较强的权重w

创建一个双翼飞机数据和变量meas在柱子空间w

Biplot(H',“得分”,,,,w,,,,“瓦拉布尔”,{'SL',,,,'SW',,,,'pl',,,,'PW'});轴([0 1.1 0 1.1])Xlabel('第1列')ylabel(“第2列”

图包含一个轴对象。轴对象包含14个类型行的对象,文本。

从随机数组开始X使用等级20,使用乘法算法在几个重复下尝试一些迭代。

RNG默认%可再现性x = rand(100,20)*rand(20,50);opt = statset('Maxiter',5,'展示',,,,'最后');[W0,H0] = nnmf(x,5,“重复”,10,...'选项',选择,...'算法',,,,'mult');
代替迭代RMS残留| Delta X |1 5 0.560887 0.0245182 2 5 0.66418 0.0364471 3 5 0.609125 0.0358355 4 5 0.608894 0.0415491 5 5 0.619291 0.0455135 6 5 0.621549 0.0299965 7 5 0.640549 0.0438758 8 5 0.673015 0.0366856 9 5 0.606835 0.0318931 10 5 0.633526 0.0319591 Final root mean square residual = 0.560887

使用交替的最小二乘,继续从最佳的结果中进行更多迭代。

opt = statset('Maxiter',1000,'展示',,,,'最后');[w,h] = nnmf(x,5,'W0',W0,'H0',H0,...'选项',选择,...'算法',,,,'als');
代替迭代RMS残留| Delta X |1 24 0.257336 0.00271859最终均方根残差= 0.257336

输入参数

全部收缩

分解矩阵,指定为真矩阵。

例子:兰德(20,30)

数据类型:单身的|双倍的

因素等级,,,,specified as a positive integer. The resulting factorswHk列和行分别。

例子:3

数据类型:单身的|双倍的

名称值参数

将可选的参数对name1 = value1,...,namen = valuen, 在哪里姓名是参数名称和价值是相应的值。名称值参数必须在其他参数之后出现,但是对的顺序并不重要。

在R2021a之前,请使用逗号分隔每个名称和值,并附上姓名用引号。

例子:[w,h] = nnmf(a,k,'算法','mult','replicates',10)选择乘法更新算法和十个重复以改进结果

分解算法,指定为逗号分隔对'算法''als'(交替的最小二乘)或'mult'(一种乘法更新算法)。

'als'算法通常更稳定,并且在更少的迭代中收敛。每次迭代需要更长的时间。因此,默认最大值为50,通常在内部测试中给出令人满意的结果。

'mult'算法通常具有更快的迭代,并且需要更多的迭代。默认最大值为100。此算法往往对启动值更敏感,因此,从运行多个复制中似乎受益更多。

例子:'算法','mult'

数据类型:char|细绳

初始值的w,指定为逗号分隔对'W0'n-经过-k矩阵,,,,wheren是行的数量一个, 和k是第二个输入参数NNMF

数据类型:单身的|双倍的

初始值的H,指定为逗号分隔对'H0'k-经过-m矩阵,,,,wherek是第二个输入参数NNMF, 和m是列的数量一个

数据类型:单身的|双倍的

算法选项,指定为逗号分隔d pair consisting of'选项'以及由Statset功能。NNMF使用选项结构的以下字段。

场地 描述
展示 Level of iterative display
  • '离开'((默认)-No display

  • '最后'-展示of final result

  • 'iTer'- 中间结果的迭代显示

MaxIter 最大迭代次数 正整数。默认值为50for the'als'算法和100for the'mult'算法。与优化设置不同,到达MaxIter迭代被视为收敛。
托尔福 终止公差对残差大小的变化 非负值。默认值为1E-4
TOLX 对元素相对变化的终止公差wH 非负值。默认值为1E-4
useParallel 指示并行计算 逻辑价值。默认值错误的表示不要并行计算,并且真的表示并行计算。并行计算需要并行计算工具箱™许可证。
useubstreams 并行计算时的可重复性类型
  • 错误的(默认) - 请勿重复计算

  • 'MLFG6331_64'

  • 'MRG32K3A'

有关详细信息,请参阅并行统计计算中的可重复性

Streams 一个Randstream此类对象的对象或单元格数组
  • 如果您不指定Streams,,,,NNMF使用默认流或流。

  • 如果useParallel真的useubstreams错误的,指定一个单元格数组Randstream对象的大小与并行池相同。否则,指定一个Randstream目的。

例子:“选项”,Statset(“显示”,“ iTer”,“ Maxiter”,50)

数据类型:结构

重复分解的次数,指定为逗号分隔对“重复”和一个积极的整数。该算法选择了新的随机启动值wH在每个复制中,除非指定,否则第一次复制'W0''H0'。如果您指定一个大于1,您可以通过设置获得更好的结果算法'mult'。See更改算法

例子:10

数据类型:单身的|双倍的

输出参数

全部收缩

非负因子一个,作为一个n-经过-k矩阵。n是行的数量一个, 和k是第二个输入参数NNMF

wH已归一化,以使行的行H具有单位长度。列w通过减小长度来排序。

非负权因素一个,返回k-经过-m矩阵。k是第二个输入参数NNMF, 和m是列的数量一个

wH已归一化,以使行的行H具有单位长度。列w通过减小长度来排序。

根平方残留,作为非负标量返回。

d = norm(a -w*h,“来回”)/sqrt(n*m)

References

[1] Berry,Michael W.,Murray Browne,Amy N. Langville,V。Paul Pauca和Robert J. Plemmons。“用于近似非负矩阵分解的算法和应用。”计算统计和数据分析52,不。1(2007年9月):155–73。https://doi.org/10.1016/j.csda.2006.11.006

扩展功能

版本历史记录

在R2008A中引入