矩阵的稀疏度计算(matlab)

得到非负矩阵分解(NMF)的基图像矩阵和系数矩阵后,Hoyer [1] 提出可以利用L1范数和L2范数之间的差异度来衡量分解后矩阵的稀疏度。

《矩阵的稀疏度计算(matlab)》 稀疏度的计算

sparseness(x) 是 [0,1] 之间的数,值越大,说明x越稀疏。

L1范数:所有元素的绝对值之和。
L2范数:所有元素的平方之和的平方根。

计算x的稀疏度,分三步:

  • x所包含的元素个数n。
  • 计算x的L1范数。
  • 计算x的L2范数。

稀疏度计算(matlab)

function sparseness = sparseness(X)
% X可以是向量或是矩阵
[m,n] = size(X);
num = m*n;

% 分别计算L1和L2范数
s1 = 0;
s2 = 0;
for i=1:m
    for j=1:n
        s1 = s1+X(i,j);
        s2 = s2+X(i,j)^2;
    end
end

% 计算稀疏度
s2 = sqrt(s2);
c = s1/s2;
a = sqrt(num)-c;
b = sqrt(num)-1;
sparseness = a/b;

在ORL人脸数据集上的实验对比:

《矩阵的稀疏度计算(matlab)》 NMF(sparseness=0.3)

《矩阵的稀疏度计算(matlab)》 加稀疏约束的NMF(sparseness=0.5)

Reference:
[1] Non-negative Matrix Factorization with Sparseness Constraints

    原文作者:huim
    原文地址: https://www.jianshu.com/p/e3cf4bf492eb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞