分布鲁棒和多目标非负矩阵分解研究(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚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中的比较

🎉3 参考文献

🌈4 Matlab代码、数据、文章


💥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 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码、数据、文章

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值