💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
2.2 在随机生成的矩阵上比较IS - NMF和Fro - NMF与DR - NMF
2.3 IS-NMF、Fro-NMF和DR-NMF在一个200x200随机生成矩阵的rank-10 NMF中的比较
💥1 概述
摘要:
非负矩阵分解 (NMF) 是一种用于分析非负数据的线性降维技术。NMF 的一个关键方面是目标函数的选择,该函数取决于对数据假设的噪声模型(或噪声统计)。在许多应用中,噪声模型是未知的,难以估计。在本文中,我们定义了一个多目标NMF(MO-NMF)问题,其中多个目标在同一NMF模型中组合在一起。我们建议使用拉格朗日对偶性来明智地优化一组权重,以便在加权和方法的框架内使用,也就是说,我们最小化单个目标函数,它是所有目标函数的加权和。我们设计了一个简单的算法,使用乘法更新来最小化这个加权总和。我们展示了如何使用它来找到分布稳健的NMF(DR-NMF)解决方案,即最小化所有目标中最大误差的解决方案。我们说明了这种方法在合成、文档和音频数据集上的有效性。结果表明,DR-NMF对于我们对NMF问题噪声模型的识别具有鲁棒性。详细文章见第4部分。
📚2 运行结果
2.1 synth Pareto测试
2.2 在随机生成的矩阵上比较IS - NMF和Fro - NMF与DR - NMF
2.3 IS-NMF、Fro-NMF和DR-NMF在一个200x200随机生成矩阵的rank-10 NMF中的比较
部分代码:
% IS-NMF
options.lambda = [1; 0];
fprintf('Computing the solution of IS-NMF. \n');
[Wis,His,eis] = multiNMFbeta(X,r,options);
% KL-NMF
options.lambda = [0; 1];
fprintf('Computing the solution of Fro-NMF. \n');
[Wfr,Hfr,efr] = multiNMFbeta(X,r,options);
% DR-NMF
% This is crucial: you need to specify the scaling of the objective
% functions; cf. the paper.
options.scalings = [1/eis(1,end); 1/efr(2,end)];
options.distribrobust = 1;
fprintf('Computing the solution of DR-NMF. \n');
[Wdr,Hdr,edr,lam] = multiNMFbeta(X,r,options);
% Display errors
display('Values of scaled objective functions:');
fprintf('IS error for IS-NMF = %2.3f, Fro error for IS-NMF = %2.3f\n', 1,eis(2,end)/efr(2,end));
fprintf('IS error for Fro-NMF = %2.3f, Fro error for Fro-NMF = %2.3f\n', efr(1,end)/eis(1,end),1);
fprintf('IS error for DR-NMF = %2.3f, Fro error for DR-NMF = %2.3f\n', edr(1,end),edr(2,end));
% Plot errors
% Display
set(0, 'DefaultAxesFontSize', 18);
set(0, 'DefaultLineLineWidth', 2);
figure;
plot( (eis.*repmat(options.scalings,1,size(eis,2)))' ); hold on;
plot( (efr.*repmat(options.scalings,1,size(efr,2)))','-.');
plot( edr' ,'o--');
legend('IS error for IS-NMF', 'Fro error for IS-NMF', ...
'IS error for Fro-NMF', 'Fro error for Fro-NMF', ...
'IS error for DR-NMF', 'Fro error for DR-NMF');
axis([0 100 0.99 1.2]);
title(sprintf('Comparison of IS-NMF, Fro-NMF and DR-NMF \n for rank-10 NMF of a 200-by-200 \n randomly generated matrix'));
xlabel('Iterations');
% IS-NMF
options.lambda = [1; 0];
fprintf('Computing the solution of IS-NMF. \n');
[Wis,His,eis] = multiNMFbeta(X,r,options);
% KL-NMF
options.lambda = [0; 1];
fprintf('Computing the solution of Fro-NMF. \n');
[Wfr,Hfr,efr] = multiNMFbeta(X,r,options);
% DR-NMF
% This is crucial: you need to specify the scaling of the objective
% functions; cf. the paper.
options.scalings = [1/eis(1,end); 1/efr(2,end)];
options.distribrobust = 1;
fprintf('Computing the solution of DR-NMF. \n');
[Wdr,Hdr,edr,lam] = multiNMFbeta(X,r,options);
% Display errors
display('Values of scaled objective functions:');
fprintf('IS error for IS-NMF = %2.3f, Fro error for IS-NMF = %2.3f\n', 1,eis(2,end)/efr(2,end));
fprintf('IS error for Fro-NMF = %2.3f, Fro error for Fro-NMF = %2.3f\n', efr(1,end)/eis(1,end),1);
fprintf('IS error for DR-NMF = %2.3f, Fro error for DR-NMF = %2.3f\n', edr(1,end),edr(2,end));
% Plot errors
% Display
set(0, 'DefaultAxesFontSize', 18);
set(0, 'DefaultLineLineWidth', 2);
figure;
plot( (eis.*repmat(options.scalings,1,size(eis,2)))' ); hold on;
plot( (efr.*repmat(options.scalings,1,size(efr,2)))','-.');
plot( edr' ,'o--');
legend('IS error for IS-NMF', 'Fro error for IS-NMF', ...
'IS error for Fro-NMF', 'Fro error for Fro-NMF', ...
'IS error for DR-NMF', 'Fro error for DR-NMF');
axis([0 100 0.99 1.2]);
title(sprintf('Comparison of IS-NMF, Fro-NMF and DR-NMF \n for rank-10 NMF of a 200-by-200 \n randomly generated matrix'));
xlabel('Iterations');
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。