zoukankan      html  css  js  c++  java
  • 谱聚类Ng算法的Matlab简单实现


    请编写一个谱聚类算法,实现“Normalized Spectral Clustering—Algorithm 3 (Ng 算法)”

    结果如下


    谱聚类算法核心步骤都是相同的:
    •利用点对之间的相似性,构建亲和度矩阵;
    •构建拉普拉斯矩阵;
    •求解拉普拉斯矩阵最小的特征值对应的特征向量(通常舍弃零特征所对应的分量全相等的特征向量);
    •由这些特征向量构成样本点的新特征,采用K-means等聚类方法完成最后的聚类。

    采用K-means等聚类方法完成最后的聚类  意思是,对特征向量构成的矩阵T,每一行作为一个样本点,进行K均值聚类。

    (1)利用点对之间的相似性,构建亲和度矩阵

    构建图时,顶点的度为 simK=10,分两类kNearNum=2

    simK=10;
    Wij=zeros(r,r);% weight
    % calculate the weight Matrix
    for k=1:r  
        for n=1:r
             Wij(k,n)=exp(-norm(X(k,:)-X(n,:))^2/2/sigma);% 计算权重
        end
    end
    
    % find the Knear  for W
    Wsort=zeros(r,r);
    index=zeros(r,r);
    for k=1:r
    %  对每一行权重排序
       [Wsort(k,:),index(k,:)]=sort(Wij(k,:));  %这句话经常不会用,记住了。   
    end
    
    W=Wij


    (2) 构建Laplace Matrix

    首先需要个对角阵D,其对角元素是亲和度矩阵的每行的和,这里也就是simK*eye(r)

    % D
    D=simK.*eye(r);
    % Laplace Matrix
    L=eye(r)-D^(-0.5)*W*D^(-0.5);
    % L=D-W

    (3) 求解拉普拉斯矩阵最小的特征值(lamda)对应的特征向量)(通常舍弃零特征所对应的分量全相等的特征向量);

    把特征向量 Vect里最小的kNearNum(聚类的个数)个用u来存储。

    [Vect,lamdaMat]=eig(L);
    lamda=zeros(k,1);
    u=zeros(r,kNearNum);
    % lamda是特征值
    for k=1:r
        lamda(k)=lamdaMat(k,k);
    end
    % lamda
    %  对lamda排序,找出最小的K个lamda对应的特征向量组成u
    [sortLamda,indexLamda]=sort(lamda); 
    countu=0;
    for k=1:kNearNum
        countu=countu+1;
        u(:,countu)=Vect(:,indexLamda(k));  
    end
    % % T
    T=zeros(r,kNearNum);% 归一化后的u
    sumU=zeros(1,kNearNum);% 为了归一化u,对每列求了平方和sumU
    for n=1:kNearNum
        for k=1:r
            sumU(1,n)=sumU(1,n)+u(k,n)^2;
        end
    end
    
    for k=1:r
        for n=1:kNearNum
            T(k,n)=u(k,n)./sqrt(sumU(1,n));
        end
    end

    (4)由这些特征向量构成样本点的新特征,采用K-means等聚类方法完成最后的聚类

    意思是,对特征向量构成的矩阵T,每一行作为一个样本点聚类

    A=Kmeans(T)  % key words

    Kmeans详见下面链接






  • 相关阅读:
    咖啡生活-享受慵懒的午后时光
    窗体皮肤实现
    编译树莓派2代B型OpenWrt固件实现无线路由器及nodogsplash认证功能
    通过hook实现禁止shift+delete快捷键
    c++ Qt向PHP接口POST文件流
    Qt for Android开发总结
    A previous installation of Qt5 Visual Studio Add-in was detected. Please uninstall it before running this installer解决办法
    windows下Qt5.1 for android开发环境配置
    Qt+mpg123+openal播放MP3流
    RTC搭建android下三层应用程序访问服务器MsSql-客户端
  • 原文地址:https://www.cnblogs.com/xy123001/p/5218655.html
Copyright © 2011-2022 走看看