⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nmf_featureget.m

📁 非负矩阵分解技术(Nonnegtive Matrix Factorization 一种信号或图像的特征提取的方法
💻 M
字号:
%***************************************8*****
                 %NMF特征提取
%*********************************************
function y=NMF_FeatureGet(InputMatrix,r,times)

%———————输入参数说明————————————————————————
%______参数1——ImputMatrix:为输入矩阵_________________________________
%----要求每一个列向量是一张图像----------------------
%_____参数2——r(基矩阵W的个数)_______________________________
%_____参数3——times( 主循环的迭代次数)_______________________________

%------------函数输出y---------------------------
%-----矩阵y=H=[特征向量1,特征向量2 。。。特征向量R];

%--------------以下为主要程序---------------------------------------------------

V=InputMatrix;%原始图像,每一列代表一张图
[n,m]=size(V);
%W=(n,r);基矩阵
%H=(r,m);系数矩阵
%V=(n,m);
%V近似为W* H
W=poissrnd(2,n,r);%初始赋值
H=poissrnd(2,r,m);%初始赋值
vv=zeros(n,m);%存循环后的结果

%------------主要循环--------------------
K=zeros(n,m);
for time=1:times
vv=W*H;
for i=1:n
    for j=1:m
        if vv(i,j)~=0 %防止零除
           K(i,j)=V(i,j)/vv(i,j);
        end  
    end
end    
W=W.*(K*(H'));
a=sum(W);%为了归一化
for i=1:r
    W(:,i)=W(:,i)/a(i);%L1归一
end 
H=(W'*K).*H;

end
%-------------计算误差---------------------------------
 vv=W*H;
 max_err=[max(sum(abs(V-vv))./sum(abs(V)))] %最大误差:
 min_err=[min(sum(abs(V-vv))./sum(abs(V)))]  %最小误差  
 mean_err= [mean(sum(abs(V-vv))./sum(abs(V)))] %误差均值 
%-----------------------------------------------------
s.W=W;
s.H=H;
y=s;
return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -