• spectral clustering


    参考这篇:

    http://blog.csdn.net/liu1194397014/article/details/52990015

    自己的改动:

    % for kmeans function
    pkg load statistics
    
    A = load('Gaussian.txt');
    %A = load('ringData.txt');
    [m, n] = size(A);
    data=A(:,:);
    % markersize default is 6
    %plot(data(:,1),data(:,2),'.', 'markersize', 10);
    % col sum. x^2 + y^2
    squareData = sum(data.*data,2);
    transitData = data*data';
    % repmat means repeat matrix to 1*m
    xi = repmat(squareData,1,m);
    xj = repmat(squareData',m,1);
    E = 2*transitData-xi-xj;
    sig = 1;
    W = exp(E / (2 * sig * sig));
    % set diagnoal to zeros
    W = W - diag(diag(W));
    D = diag(sum(W,2));
    %L = D-W;
    L =D^(-.5)*W*D^(-.5);
    
    K = 3;
    [X, di] = eig(L);
    [Xsort, Dsort] = eigsort(X, di);
    %Xsort = sort(X);
    Xuse = Xsort(:, 1:K);
    
    Xsq = Xuse.*Xuse;
    divmat=repmat(sqrt(sum(Xsq')'),1,K);
    Y=Xuse./divmat;
    
    [c, Dsum, z] = kmeans(Y, K);
    kk = c;
    c1 = find(kk == 1);
    c2 = find(kk == 2);
    c3 = find(kk == 3);
    
    plot(data(c1,1),data(c1,2),'.','marker', '+');
    hold on;
    plot(data(c2,1),data(c2,2),'.','marker', '*');
    hold on;
    plot(data(c3,1),data(c3,2),'.','marker', '+');
    
    function [Vsort, Dsort] = eigsort (V, D)
      eigvals = diag(D);
      [lohival,lohiindex] = sort(eigvals);
      lambda = flipud(lohival);
      index = flipud(lohiindex);
      Dsort = diag(lambda);
    % Sort eigenvectors to correspond to the ordered eigenvalues. Store sorted
    % eigenvectors as columns of the matrix vsort.
      M = length(lambda);
      Vsort = zeros(M,M);
    for i=1:M
      Vsort(:,i) = V(:,index(i));
    end;
    

    分别使用两个文件测试,结果如下图:

      

  • 相关阅读:
    for循环中break和continue的区别
    详解vue生命周期及每个阶段适合进行的操作
    ansible部署
    ansible介绍
    jenkins介绍和安装
    查看磁盘型号和内存及raid信息
    shell 概览
    day5 函数和参数
    day4(dict和set)
    day3(if和for)
  • 原文地址:https://www.cnblogs.com/pxy7896/p/6508670.html
Copyright © 2020-2023  润新知