这个例子展示了如何进行非负矩阵分解。
加载示例数据。
负载摩尔X =摩尔(:1:5);rng (“默认”);%的再现性
计算的二级近似X
使用乘法更新算法,从5个随机初始值开始W
和H
.
选择= statset (“麦克斯特”10“显示”,“最后一次”);[W0, H0] = nnmf (X, 2,“复制”5,“选项”选择,“算法”,“乘”);
rep迭代rms残差|delta x| 1 10 358.296 0.00190554 2 10 78.3556 0.000351747 3 10 230.962 0.0172839 4 10 326.347 0.00739552 5 10 361.547 0.00705539最终均方根残差= 78.3556
的“乘”
算法对初值比较敏感,在使用时是很好的选择“复制”
找到W
和H
从多个随机的起始值。
现在使用交替最小二乘算法进行分解,这种算法收敛得更快,也更一致。从初始阶段开始,运行100次以上的迭代W0
和H0
确认以上。
选择= statset (“麦克斯特”, 1000,“显示”,“最后一次”);[W H] = nnmf (X, 2,“w0”W0,“h0”H0,“选项”选择,“算法”,“als”);
rep迭代rms残差|delta x| 1 2 77.5315 0.000830334最终均方根残差= 77.5315
这两列W
是转化后的预测者。两排H
给出五个预测因子的相对贡献X
给预测者W
.显示H。
H
H =2×50.0835 0.0190 0.1782 0.0072 0.9802 0.0559 0.0250 0.9969 0.0085 0.0497
第五项预测X
(权重0.9802)强烈影响在W
.第三个预测因子X
(权重0.9969)强烈影响中第二个预测因子W
.
可视化预测因子的相对贡献X
与biplot
,表示的列空间中的数据和原始变量W
.
biplot (H ',“分数”W,“varlabels”, {'','',v3的,'',“v5”});xlabel([0 1.1 0 1.1])第一列的) ylabel (第2列的)