精华内容
下载资源
问答
  • 非负矩阵分解 matlab

    2014-04-02 10:47:50
    本程序为非负矩阵分解,适用于高光谱解混。图形图像处理方面的 matlab程序
  • 非负矩阵分解matlab代码,内容全,适用于各种信号的分析 非负矩阵分解matlab代码,内容全,适用于各种信号的分析
  • 程序基于板仓-斋藤的非负矩阵分解语音分解
  • NMFSC稀疏非负矩阵分解算法应用程序,其中还包含了其他一些非负矩阵分解的已经写好的程序
  • 非负矩阵分解matlab程序

    热门讨论 2011-02-24 19:51:31
    典型非负矩阵分级的matlab程序,作用是将高维数据进行降维。
  • 前面看到有人在找m版本的其实国外的很多 发个简单的,希望有所帮助
  • 后来看了非负矩阵分解的算法,自己推了一下。模仿NMF取了一个特殊的学习率,把负项削掉了(没有完备的证明),但正常推导效果不好(猜测是步长会变大?)。然后找到一篇博文,上面加了一个对W或H的归一化,效果就好了。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    刚接触机器学习和矩阵分解,有一个预测矩阵空白数据的需求,比较基础的是采用Funk-SVD,V=WH,但这个分解出来可能有负值。后来看了非负矩阵分解的算法,自己推了一下。模仿NMF取了一个特殊的学习率,把负项削掉了(没有完备的证明),但正常推导效果不好(猜测是步长会变大?)。然后找到一篇博文,上面加了一个对W或H的归一化,效果就好了。也不知道为啥。有哪位大佬懂么?

    下附matlab程序

    [n m]=size(V);

    Va=V;

    r=round(0.5*m*n/(m+n))+1; %设置分解矩阵的秩

    W=rand(n,r); %初始化WH,为非负数

    H=rand(r,m);

    P=ones(n,m)-isnan(V);

    for i=1:n

    for j=1:m

    if P(i,j)==0 %空

    V(i,j)=1; %任意给一个非空初值

    end

    end

    end

    maviter=2000; %最大迭代次数

    for iter=1:maviter

    % W=W.*((V./(W*H))*H'); %注意这里的三个公式和文中的是对应的

    % W=W./(ones(i,1)*sum(W));

    % H=H.*(W'*(V./(W*H)));

    % W迭代

    B=W*H;

    for i=1:n

    for k=1:r

    fz=0;fm=0;

    for j=1:m

    fz=fz+P(i,j)*V(i,j)*H(k,j);

    fm=fm+P(i,j)*H(k,j)*B(i,j);

    end

    W(i,k)=W(i,k)*fz/fm;

    end

    end

    % W=W./(ones(n,1)*sum(W));

    % H迭代

    for j=1:m

    for k=1:r

    fz=0;fm=0;

    for i=1:n

    fz=fz+P(i,j)*W(i,k)*V(i,j);

    fm=fm+P(i,j)*B(i,j)*W(i,k);

    end

    H(k,j)=H(k,j)*fz/fm;

    end

    end

    H=H./(sum(H)*ones(m,1)); %%%%%这里多了一步归一化

    loss=0;

    for i=1:n

    for j=1:m

    if P(i,j)>0 %非空

    error = 0;

    for k=1:r

    error = error+W(i,k)*H(k,j);

    end

    loss=loss+(V(i,j)-error)*(V(i,j)-error);

    end

    end

    end

    if mod(iter,100)==0

    iter

    loss

    end

    end

    V0=W*H;

    re_V=Va;

    for i=1:n

    for j=1:m

    if P(i,j)==0 %空

    re_V(i,j)=V0(i,j);

    end

    end

    end

    展开全文
  • 线性代数 NMF 非负矩阵分解 Matlab

    千次阅读 2013-11-17 01:01:34
    点乘 dot product A.*B 叉乘 cross product A*B 转置 tranpose A' 记为A的转置 ...矩阵 A 为 矩阵B为 C=A*B=×== C=A.*B=各个元素对应相乘= 1X5 2X6 3X7 4X

    点乘 dot product A.*B

    叉乘 cross product A*B

    转置  tranpose A' 记为A的转置

    点除 dot divide A./B


    举例


    矩阵 A 为


    矩阵B为


    C=A*B=×==


    C=A.*B=各个元素对应相乘=


    1X5 2X6

    3X7  4X8


    5  12

    21 32


    详细介绍请参见

    http://math.ecnu.edu.cn/sxsykc/jxnr/mat3.htm


    NMF转自

    http://www.cnblogs.com/tiandsp/archive/2012/11/13/2768597.html


    通常矩阵分解如svd或其他什么的分解都会把矩阵分解为有正有负的矩阵,而他的这种分解方法就把矩阵完全分解成只有正数的矩阵,因为现实世界中如图像,负数是没什么意义的,所以这种只分解为正数矩阵的分解方法就很有意义了,要不也不会发在nature这样牛B的杂志上。

      这里是分解的公式:

      这里r是分解矩阵的秩,V是原矩阵的一个近似,W与H就是分解而成的两个矩阵。

      下面是W和H的求法,是一个迭代算法,初始的W与H是随机的就行了:

      

      关于代码,我借鉴了这个博客的:http://fxy1211.blog.163.com/blog/static/68255322007826111015905/,真是太感谢这位博主了。

      下面是代码:

    复制代码
    clear all;
    close all;
    clc;
    
    V=double(imread('lena.jpg'));
    imshow(mat2gray(V));
    
    [i u]=size(V);                                    %计算V的规格
    r=100;                                  %设置分解矩阵的秩
    W=rand(i,r);                            %初始化WH,为非负数
    H=rand(r,u);
    maviter=100;                                    %最大迭代次数
    for iter=1:maviter
        W=W.*((V./(W*H))*H');           %注意这里的三个公式和文中的是对应的
        W=W./(ones(i,1)*sum(W));    
        H=H.*(W'*(V./(W*H)));
    end
    
    img_V=W*H;
    figure;
    imshow(mat2gray(img_V));
    复制代码

      下面是原图和重构后的效果,如果秩和迭代次数越大,那么重构后的图越接近原图:

    原图

    重构图





    展开全文
  • Code%D输入数据n(个)*m(维)r降维后的维度%D=W*HW基向量矩阵H在基下的坐标向量function[W,H]=NMF(D,r)sizeD=size(D);n=sizeD(1);m=sizeD(2);W=abs(rand(n,r));H=abs(rand(r,m));foriterate=1:100WD=W'*D...
    ContractedBlock.gifExpandedBlockStart.gifCode
     % D 输入数据 n(个)* m(维)  r 降维后的维度
    %  D=W*H   W 基向量矩阵  H 在基下的坐标向量

    function [W,H]=NMF(D,r)      

    sizeD=size(D);

    n=sizeD(1);
    m=sizeD(2);

    W=abs(rand(n,r));

    H=abs(rand(r,m));

    for iterate=1:100
        
        WD=W'*D;
        WWH=W'*W*H;

        for a = 1:r
            for u=1:m
                H(a,u)=H(a,u)*WD(a,u)/WWH(a,u);
            end
        end

        
        DH=D*H';
        WHH=W*H*H';
        
        for i = 1:n
            for a=1:r
                W(i,a)=W(i,a)*DH(i,a)/WHH(i,a);
            end
        end

    end

    转载于:https://www.cnblogs.com/feathersky/archive/2009/06/22/1508414.html

    展开全文
  • 通常矩阵分解如svd或其他什么的分解都会把矩阵分解为有正有负的矩阵,而他的这种分解方法就把矩阵完全分解成只有正数的矩阵,因为现实世界中如图像,负数是没什么意义的,所以这种只分解为正数矩阵的分解方法就很有...

    原理上面两篇文章已经很清楚了,我在按自己的理解介绍一下吧。

    通常矩阵分解如svd或其他什么的分解都会把矩阵分解为有正有负的矩阵,而他的这种分解方法就把矩阵完全分解成只有正数的矩阵,因为现实世界中如图像,负数是没什么意义的,所以这种只分解为正数矩阵的分解方法就很有意义了,要不也不会发在nature这样牛B的杂志上。

    这里是分解的公式:

    0480ae42a5f95781c97ea14cd57a2a4d.png

    这里r是分解矩阵的秩,V是原矩阵的一个近似,W与H就是分解而成的两个矩阵。

    下面是W和H的求法,是一个迭代算法,初始的W与H是随机的就行了:

    a70103c6f6cdfd66c7365984cf2105fd.png

    下面是代码:

    clear all;

    close all;

    clc;

    V=double(imread('lena.jpg'));

    imshow(mat2gray(V));

    [i u]=size(V); %计算V的规格

    r=100; %设置分解矩阵的秩

    W=rand(i,r); %初始化WH,为非负数

    H=rand(r,u);

    maviter=100; %最大迭代次数for iter=1:maviter

    W=W.*((V./(W*H))*H'); %注意这里的三个公式和文中的是对应的

    W=W./(ones(i,1)*sum(W));

    H=H.*(W'*(V./(W*H)));

    endimg_V=W*H;

    figure;

    imshow(mat2gray(img_V));

    下面是原图和重构后的效果,如果秩和迭代次数越大,那么重构后的图越接近原图:

    c3f1cfec8c9b4bd220eab3d1e8f7c89f.png原图

    a5f4c1f265e1fb3fe82e8be56e246a3a.png重构图

    因为这个是看自己相关方向论文偶然在一篇论文的引用中看到了这个算法,所以就稍微了解了一下,肯定有不妥的地方,就这样吧。

    展开全文
  • 非负矩阵分解(NMF,Nonnegtive Matrix Factorization),NMF,非负矩阵分解,将大矩阵分解成两个小矩阵,且这两个小矩阵都不包含负值。 代码来自Chih-Jen Lin
  • 非负矩阵分解matlab代码,内容全

    热门讨论 2010-04-29 12:51:49
    非负矩阵分解matlab代码,内容全This functions compares two W'matrices from NMF % by estimating the permutation and computing the % normalized LS of the permuted matrix
  • Matlab非负矩阵分解NMF-NMF.ppt 非负矩阵分解讲义与程序 QQ截图未命名1.jpg QQ截图未命名2.jpg
  • Matlab非负矩阵分解实现协同过滤,可用
  • 非负矩阵分解算法

    千次阅读 2010-10-30 22:33:00
    非负矩阵分解Matlab代码下载 关键词: 非负矩阵分解 NMF Matlab 代码 下载 矩阵分解是实现大规模数据处理与分析的一种有效工具. 非负矩阵分解(non-negative matrix factorization,NMF)算法是在矩阵中...
  • 前言非负矩阵分解顾名思义:是一个矩阵分解,并且分解矩阵非负。看起来这句话给人的信息量不大,背后却能挖掘NMF为什么会被提出且广泛被运用的原因。首先是NMF是一个矩阵分解,它和PCA(主成分分析)、ICA(独立成分...
  • 基于非负矩阵分解的盲信号分离方法研究–Matlab 程序仿真作者:ljy1232020年11月14日 12:370浏览评论 代码下载地址:https://dwz.cn/Qz4rfGio 本文主要仿真了KL-NMF、增量KL-NMF、EUC-NMF、增量EUC-NMF四种NMF...
  • NMFLibrary:用于非负矩阵分解(NMF)的MATLAB库:版本1.8.1
  • Matlab用半非负矩阵分解实现采样和协同过滤 http://www.cnblogs.com/hxsyl/
  • matlab下的NMF算法实现 非负矩阵分解

    热门讨论 2010-04-22 21:25:59
    NMF是一种新的矩阵分解算法,它将1个非负矩阵分解为左右2个非负矩阵的乘积。由于分解前后的矩阵中仅包含非负的元素,因此原矩阵中的列向量可以解释为对左矩阵中所有列向量(称为基向量)的加权和,而权重系数为右矩阵...
  • 数据挖掘 非负矩阵交替限制最小二乘法 MATLAB程序代码
  • matlab练习程序(非负矩阵分解

    千次阅读 2018-02-10 23:00:31
    matlab练习程序(非负矩阵分解) 这个算法是Lee和Seung在1999年发表在nature杂志上的。具体论文看这里:http://www.seas.upenn.edu/~ddlee/Papers/nmf.pdf。 看不懂英文没关系,可以看这个中文的介绍:...
  • 使用MATLAB实现NMF算法,是一种人脸特征提取的算法,基于非负矩阵分解
  • 基于非负矩阵分解的多聚焦图像融合研究[J]. 光学学报,2005,25(6): 755-759. [12]LEE D D,SEUNG H S. Learning the parts of objects by non-negative matrix factorization[J]. Nature,1999,401(21): 788-791...

空空如也

空空如也

1 2 3 4
收藏数 71
精华内容 28
关键字:

非负矩阵分解matlab

matlab 订阅