GNMF其中一步的matble程序详解

数据来源http://www.cad.zju.edu.cn/home/dengcai/Data/TextData.html

里面的GNMF其中一步的matble程序详解

这个数据是一个文件项矩阵

解释的代码也是这个事例里面的

为了matble运行方便,将下载好的数据集放在matble的运行文件中

GNMF其中一步的matble程序详解GNMF其中一步的matble程序详解

下面是matble代码

load('USPS')
faceW = 16; 
faceH = 16; 
numPerLine = 20; 
ShowLine = 4; 

Y = zeros(faceH*ShowLine,faceW*numPerLine); 
for i=0:ShowLine-1 
  for j=0:numPerLine-1 
    Y(i*faceH+1:(i+1)*faceH,j*faceW+1:(j+1)*faceW) = reshape(fea(i*numPerLine+j+1,:),[faceH,faceW])'; 
  end 
end 

imagesc(Y);colormap(gray);

运行即可得到GNMF其中一步的matble程序详解



load('USPS')    %%导入USPS.mat数据文件,USPS.mat中包含了一个文本矩阵fea,与一个标记矩阵gnd。fea为   256X9298的矩阵
faceW = 16; 
faceH = 16; 
numPerLine = 20; 
ShowLine = 4; 

Y = zeros(faceH*ShowLine,faceW*numPerLine); %%设定了零矩阵Y,矩阵大小为faceH*ShowLine,faceW*numPerLine,即

                                                                                    16*4    X    16*20   的全零矩阵。

for i=0:ShowLine-1 
   for j=0:numPerLine-1 
     Y(i*faceH+1:(i+1)*faceH,j*faceW+1:(j+1)*faceW) = reshape(fea(i*numPerLine+j+1,:),[faceH,faceW])'; 
   end 

end     %%reshape()函数为转换函数,例如可以将3X4的矩阵转换为2X6的矩阵

           %%Y(i*faceH+1:(i+1)*faceH,j*faceW+1:(j+1)*faceW),看着复杂,实际上是在原全零矩阵上截取一个这样大小的矩阵

       %%这里举例说明:假设当i=0,j=0时,Y(i*faceH+1:(i+1)*faceH,j*faceW+1:(j+1)*faceW)就变为

           %%Y(0*16+1:1*16,0*16+1:1*16)     整理后        Y(1:16,1:16)就表示截取原Y矩阵的前16行与前16列

%%同理   当i=0,j=1时   整理后Y(1:16,17:2*16),表示截取原Y矩阵的前16行,第二个16列,之后i,j不同取值,也依次类推。

%%  fea(i*numPerLine+j+1,:),实际上表示fea矩阵的第i*numPerLine+j+1行,如果是fea(:,i*numPerLine+j+1) 则表示fea的第i*numPerLine+j+1列。

%%为了形象,举例说明,同上假设当i=0,j=0时:

Y(i*faceH+1:(i+1)*faceH,j*faceW+1:(j+1)*faceW) = reshape(fea(i*numPerLine+j+1,:),[faceH,faceW])'; 变为

Y(1:16,1:16)=reshape(fea(1,:),[16,16])‘,其含义就是将fea矩阵的第一行256的数据,按列放入16X16的矩阵,然后转置赋值给Y的第前16行X前16列上,因为默认按列放入。 ( 16*16正好等于fea的列256 )

GNMF其中一步的matble程序详解

GNMF其中一步的matble程序详解

GNMF其中一步的matble程序详解

GNMF其中一步的matble程序详解

依次到循环结束

如图GNMF其中一步的matble程序详解最终只用了fea矩阵的前80行,通过最终的结果可以看出,fea矩阵的每一行聚类为一个数字。这是GNMF其中的一步。



imagesc(Y);colormap(gray);

%imagesc(A) 将矩阵A中的元素数值按大小转化为不同颜色,并在坐标轴对应位置处以这种颜色染色。colormap 是用于控制曲面图的颜色。例如: colormap(gray) 输出一个灰色系的曲面图 当然你也可以选择其他色系。嘻嘻试过0到1,由黑到白。