主要内容

nnmf

非负矩阵分解

描述

例子

WH= nnmf(一个k因素的n——- - - - - -矩阵一个非负面因素Wn——- - - - - -k),Hk——- - - - - -).因式分解并不精确;W * H低秩近似是一个.的因素W而且H最小化均方根残差D之间的一个而且W * H

D =范数(A - W*H,“摇来摇去”) /√(n *米)

因式分解使用迭代算法,从随机初值开始W而且H.因为均方根残差D可能有局部最小值,重复分解可能得到不同的结果W而且H.有时算法收敛到比k,可以表明结果不是最优的。

例子

WH= nnmf(一个k名称,值使用一个或多个名称-值对参数修改分解。例如,您可以通过设置请求重复分解“复制”到大于1的整数值。

WHD= nnmf(___还返回均方根残差D使用前面语法中的任何输入参数组合。

例子

全部折叠

加载样例数据。

负载fisheriris

计算费雪虹膜数据中四个变量测量值的非负秩二近似。

rng (1)%用于再现性[W,H] = nnmf(meas,2);H
H =2×40.6945 0.2856 0.6220 0.2218 0.8020 0.5683 0.1834 0.0149

第一个和第三个变量(萼片长度和花瓣长度,系数分别为0.6945和0.6220)为的第一列提供了较强的权重W.第一个和第二个变量(萼片长度和宽度,系数分别为0.8020和0.5683)为的第二列提供了较强的权重W

创建一个biplot的数据和变量的列空间中W

biplot (H ',“分数”W,“VarLabels”, {“sl”“西南”“pl”“pw”});轴([0 1.1 0 1.1])第一列的) ylabel (第2列的

图中包含一个轴对象。axis对象包含xlabel Column 1, ylabel Column 2,包含8个line, text类型的对象。一行或多行仅使用标记显示其值

从一个随机数组开始X对于排名20,尝试使用乘法算法在几个重复中进行几次迭代。

rng默认的%用于再现性X =兰特(100,20)*兰特(20,50);Opt = statset(“麦克斯特”5,“显示”“最后一次”);[W0,H0] = nnmf(X,5,“复制”10...“选项”选择,...“算法”“乘”);
rep迭代rms残差|delta x| 15 0.560887 0.0245182 25 0.66418 0.0364471 35 0.609125 0.0358355 45 0.608894 0.0415491 55 0.619291 0.0455135 65 0.621549 0.0299965 85 0.673015 0.0366856 95 0.606835 0.0318931 10 5 0.633526 0.0319591最终均方根残差= 0.560887

继续使用交替最小二乘从这些最好的结果进行更多的迭代。

Opt = statset(“麦克斯特”, 1000,“显示”“最后一次”);[W,H] = nnmf(X,5,“W0”W0,“H0”H0,...“选项”选择,...“算法”“als”);
代表迭代均方根残差|delta x| 1 24 0.257336 0.00271859最终均方根残差= 0.257336

输入参数

全部折叠

要分解的矩阵,指定为实矩阵。

例子:兰特(20、30)

数据类型:|

因子的等级,指定为正整数。导致的因素W而且Hk分别为列和行。

例子:3.

数据类型:|

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来名字在报价。

例子:[W H] = nnmf (k,“算法”,“乘”、“复制”,10)选择乘法更新算法,重复十次以改善结果

分解算法,指定为由逗号分隔的对组成“算法”而且“als”(交替最小二乘)或“乘”(一种乘法更新算法)。

“als”算法通常更稳定,收敛在更少的迭代。每次迭代都要花费更长的时间。因此,默认的最大值是50,在内部测试中通常会给出令人满意的结果。

“乘”算法通常有更快的迭代,需要更多的迭代。默认最大值为100。该算法往往对初始值更敏感,因此似乎可以从运行多个复制中获益更多。

例子:“算法”,“乘”

数据类型:字符|字符串

初始值W,指定为逗号分隔的对,由“W0”和一个n——- - - - - -k矩阵,n的行数是多少一个,k第二个输入参数是nnmf

数据类型:|

初始值H,指定为逗号分隔的对,由“H0”和一个k——- - - - - -矩阵,k第二个输入参数是nnmf,列数是一个

数据类型:|

算法选项,指定为逗号分隔的对,由“选项”返回的结构statset函数。nnmf使用选项结构的以下字段。

描述
显示 迭代显示级别
  • “关闭”(默认)-不显示

  • “最后一次”-显示最终结果

  • “通路”-中间结果的迭代显示

麦克斯特 最大迭代次数 正整数。默认为50“als”算法和One hundred.“乘”算法。与优化设置不同,达到麦克斯特迭代被视为收敛。
TolFun 终止容差对残差大小的变化 非负价值。默认为1的军医
TolX 终止公差对元件的相对变化有影响W而且H 非负价值。默认为1的军医
UseParallel 指示并行计算 逻辑值。默认的指示不并行计算,和真正的表示并行计算。并行计算需要并行计算工具箱™许可证。
UseSubstreams 并行计算时的再现性类型
  • (默认)-不可重复计算

  • “mlfg6331_64”

  • “mrg32k3a”

详细信息请参见并行统计计算的再现性

一个RandStream对象或此类对象的单元格数组
  • 如果您没有指定nnmf使用默认流或多个流。

  • 如果UseParallel真正的而且UseSubstreams,指定单元格数组RandStream与并行池大小相同的对象。否则,请指定单个RandStream对象。

例子:“选项”,statset(‘显示’,‘iter’,‘麦克斯特’,50)

数据类型:结构体

重复分解的次数,指定为由逗号分隔的对组成的“复制”一个正整数。算法选择新的随机起始值W而且H在每次复制时,如果指定,则在第一次复制时除外“W0”而且“H0”.如果指定的值大于1,可以通过设置获得更好的效果算法“乘”.看到改变算法

例子:10

数据类型:|

输出参数

全部折叠

的非负左因子一个,作为n——- - - - - -k矩阵。n的行数是多少一个,k第二个输入参数是nnmf

W而且H是标准化的,所以H有单位长度。的列W按长度递减顺序排列。

的非负右因子一个,作为k——- - - - - -矩阵。k第二个输入参数是nnmf,列数是一个

W而且H是标准化的,所以H有单位长度。的列W按长度递减顺序排列。

均方根残差,作为非负标量返回。

D =范数(A - W*H,“摇来摇去”) /√(n *米)

参考文献

[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中引入