📄 nmf_featureget.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 + -