精华内容
下载资源
问答
  • 峰值聚类算法(matlab)

    2021-01-03 23:10:32
    基于密度峰值快速搜索发现聚类中心的聚类算法matlab代码
  • 基于密度峰值快速搜索发现聚类中心的聚类算法源代码。
  • 密度峰值聚类算法MATLAB程序数据见:MATLAB中“fitgmdist”的用法及其GMM聚类算法,保存为gauss_data.txt文件,数据最后一列是类标签。1. MATLAB程序clear allclose alldata_load=dlmread('gauss_data.txt');[num,...

    密度峰值聚类算法MATLAB程序

    数据见:MATLAB中“fitgmdist”的用法及其GMM聚类算法,保存为gauss_data.txt文件,数据最后一列是类标签。

    1. MATLAB程序

    clear all

    close all

    data_load=dlmread('gauss_data.txt');

    [num,dim]=size(data_load); %数据最后一列是类标签

    data=data_load(:,1:dim-1); %去掉标签的数据

    mdist=pdist(data); %两两行之间距离

    A=tril(ones(num))-eye(num);

    [x,y]=find(A~=0);

    % Column 1: id of element i, Column 2: id of element j', Column 3: dist(i,j)'

    xx=[x y mdist'];

    ND=max(xx(:,2));

    NL=max(xx(:,1));

    if (NL>ND)

    ND=NL;

    end

    N=size(xx,1);

    for i=1:ND

    for j=1:ND

    dist(i,j)=0;

    end

    end

    for i=1:N

    ii=xx(i,1);

    jj=xx(i,2);

    dist(ii,jj)=xx(i,3);

    dist(jj,ii)=xx(i,3);

    end

    percent=2.0;

    fprintf('average percentage of neighbours (hard coded): %5.6f\n', percent);

    position=round(N*percent/100);

    sda=sort(xx(:,3));

    dc=sda(position);

    fprintf('Computing Rho with gaussian kernel of radius: %12.6f\n', dc);

    for i=1:ND

    rho(i)=0.;

    end

    %

    % Gaussian kernel

    %

    for i=1:ND-1

    for j=i+1:ND

    rho(i)=rho(i)+exp(-(dist(i,j)/dc)*(dist(i,j)/dc));

    rho(j)=rho(j)+exp(-(dist(i,j)/dc)*(dist(i,j)/dc));

    end

    end

    %

    % "Cut off" kernel

    %

    %for i=1:ND-1

    % for j=i+1:ND

    % if (dist(i,j)

    % rho(i)=rho(i)+1.;

    % rho(j)=rho(j)+1.;

    % end

    % end

    %end

    maxd=max(max(dist));

    [rho_sorted,ordrho]=sort(rho,'descend');

    delta(ordrho(1))=-1.;

    nneigh(ordrho(1))=0;

    for ii=2:ND

    delta(ordrho(ii))=maxd;

    for jj=1:ii-1

    if(dist(ordrho(ii),ordrho(jj))

    delta(ordrho(ii))=dist(ordrho(ii),ordrho(jj));

    nneigh(ordrho(ii))=ordrho(jj);

    end

    end

    end

    delta(ordrho(1))=max(delta(:));

    disp('Generated file:DECISION GRAPH')

    disp('column 1:Density')

    disp('column 2:Delta')

    fid = fopen('DECISION_GRAPH', 'w');

    for i=1:ND

    fprintf(fid, '%6.2f %6.2f\n', rho(i),delta(i));

    end

    disp('Select a rectangle enclosing cluster centers')

    scrsz = get(0,'ScreenSize');

    figure('Position',[6 72 scrsz(3)/4. scrsz(4)/1.3]);

    for i=1:ND

    ind(i)=i;

    gamma(i)=rho(i)*delta(i);

    end

    subplot(2,1,1)

    tt=plot(rho(:),delta(:),'o','MarkerSize',5,'MarkerFaceColor','k','MarkerEdgeColor','k');

    title ('Decision Graph','FontSize',15.0)

    xlabel ('\rho')

    ylabel ('\delta')

    fig=subplot(2,1,1);

    rect = getrect(fig);

    rhomin=rect(1);

    deltamin=rect(2);

    NCLUST=0;

    for i=1:ND

    cl(i)=-1;

    end

    for i=1:ND

    if ( (rho(i)>rhomin) && (delta(i)>deltamin))

    NCLUST=NCLUST+1;

    cl(i)=NCLUST;

    icl(NCLUST)=i;

    end

    end

    fprintf('NUMBER OF CLUSTERS: %i \n', NCLUST);

    disp('Performing assignation')

    %assignation

    for i=1:ND

    if (cl(ordrho(i))==-1)

    cl(ordrho(i))=cl(nneigh(ordrho(i)));

    end

    end

    %halo

    for i=1:ND

    halo(i)=cl(i);

    end

    if (NCLUST>1)

    for i=1:NCLUST

    bord_rho(i)=0.;

    end

    for i=1:ND-1

    for j=i+1:ND

    if ((cl(i)~=cl(j))&& (dist(i,j)<=dc))

    rho_aver=(rho(i)+rho(j))/2.;

    if (rho_aver>bord_rho(cl(i)))

    bord_rho(cl(i))=rho_aver;

    end

    if (rho_aver>bord_rho(cl(j)))

    bord_rho(cl(j))=rho_aver;

    end

    end

    end

    end

    for i=1:ND

    if (rho(i)

    halo(i)=0;

    end

    end

    end

    for i=1:NCLUST

    nc=0;

    nh=0;

    for j=1:ND

    if (cl(j)==i)

    nc=nc+1;

    end

    if (halo(j)==i)

    nh=nh+1;

    end

    end

    fprintf('CLUSTER: %i CENTER: %i ELEMENTS: %i CORE: %i HALO: %i \n', i,icl(i),nc,nh,nc-nh);

    end

    cmap=colormap;

    for i=1:NCLUST

    ic=int8((i*64.)/(NCLUST*1.));

    subplot(2,1,1)

    hold on

    plot(rho(icl(i)),delta(icl(i)),'o','MarkerSize',8,'MarkerFaceColor',cmap(ic,:),'MarkerEdgeColor',cmap(ic,:));

    end

    subplot(2,1,2)

    disp('Performing 2D nonclassical multidimensional scaling')

    Y1 = mdscale(dist, 2, 'criterion','metricstress');

    plot(Y1(:,1),Y1(:,2),'o','MarkerSize',2,'MarkerFaceColor','k','MarkerEdgeColor','k');

    title ('2D Nonclassical multidimensional scaling','FontSize',15.0)

    xlabel ('X')

    ylabel ('Y')

    for i=1:ND

    A(i,1)=0.;

    A(i,2)=0.;

    end

    for i=1:NCLUST

    nn=0;

    ic=int8((i*64.)/(NCLUST*1.));

    for j=1:ND

    if (halo(j)==i)

    nn=nn+1;

    A(nn,1)=Y1(j,1);

    A(nn,2)=Y1(j,2);

    end

    end

    hold on

    plot(A(1:nn,1),A(1:nn,2),'o','MarkerSize',2,'MarkerFaceColor',cmap(ic,:),'MarkerEdgeColor',cmap(ic,:));

    end

    %for i=1:ND

    % if (halo(i)>0)

    % ic=int8((halo(i)*64.)/(NCLUST*1.));

    % hold on

    % plot(Y1(i,1),Y1(i,2),'o','MarkerSize',2,'MarkerFaceColor',cmap(ic,:),'MarkerEdgeColor',cmap(ic,:));

    % end

    %end

    faa = fopen('CLUSTER_ASSIGNATION', 'w');

    disp('Generated file:CLUSTER_ASSIGNATION')

    disp('column 1:element id')

    disp('column 2:cluster assignation without halo control')

    disp('column 3:cluster assignation with halo control')

    for i=1:ND

    fprintf(faa, '%i %i %i\n',i,cl(i),halo(i));

    end

    2. 结果

    b83e3af55abd9a90fb5818a4b9100bf7.png

    展开全文
  • 一种基于密度峰值聚类的图像分割算法.pdf
  • 密度峰值聚类算法(DPC)

    千次阅读 2021-11-22 15:35:19
    通过学习密度峰值聚类算法(DPC),掌握算法的原理及其优缺点,对改进方法的论文进行总结,最后给出了MATLAB代码实现该算法。

    前言

    Rodriguez 等于2014年提出快速搜索和寻找密度峰值的聚类(clustering by fast search and find of density peaks),简称密度峰值聚类(density peaks clustering,DPC)算法。

    一、DPC算法

    1.1 DPC算法的两个假设

    1)类簇中心被类簇中其他密度较低的数据点包围;
    2)类簇中心间的距离相对较远。

    1.2 DPC算法的两个重要概念

    1)局部密度
    设有数据集为 ,其中 ,N为样本个数,M为样本维数。
    对于样本点i的局部密度,局部密度有两种计算方式,离散值采用截断核的计算方式,连续值则用高斯核的计算方式。
    在这里插入图片描述
    式中, d i j d_{ij} dij 为数据点 i i i 与数据点 j j j 的欧氏距离, d c d_{c} dc 为数据点i的邻域截断距离。
    采用截断核计算的局部密度 ρ i ρ_{i} ρi 等于分布在样本点 i i i 的邻域截断距离范围内的样本点个数;而利用高斯计算的局部密度 ρ i ρ_{i} ρi 等于所有样本点到样本点i的高斯距离之和。
    DPC算法的原论文指出,对于较大规模的数据集,截断核的计算方式聚类效果较好;而对于小规模数据集,高斯核的计算方式聚类效果更为明显。
    2)相对距离
    相对距离 δ i δ_{i} δi 指样本点 i i i 与其他密度更高的点之间的最小距离。在计算样本点 i i i 前需要对每个数据点的局部密度进行排序。
    对于密度最高的样本,相对距离定义为:
    δ i = m a x i ≠ j ( d i j ) δ_{i}=\underset{i≠j}{max}(d_{ij}) δi=i=jmax(dij)
    对于其余数据点,相对距离定义为:
    δ i = m i n j : ρ j > ρ i ( d i j ) δ_{i}=\underset{j:ρ_{j}>ρ_{i}}{min}(d_{ij}) δi=j:ρj>ρimin(dij)
    由于密度最高的样本不存在比其密度更高的点,DPC认为该点必为密度峰值(类簇中心),人为设定其相对距离为最大值。剩余的密度峰值需要同时满足两个条件:局部密度 ρ ρ ρ 较高,相对距离 δ δ δ 较大。为此,DPC算法的原论文通过决策值 γ γ γ 寻找这类密度峰值,下式给出了 γ i γ_{i} γi 的定义:
    γ i = ρ i × δ i γ_{i}=ρ_{i}×δ_{i} γi=ρi×δi
    找到密度峰值后,DPC将剩余数据点分配给密度比它高的最近数据点所在类簇,形成多个从密度峰值出发的树状结构,每一个树状结构代表一个类簇。

    1.3 DPC算法的执行步骤

    1)利用样本集数据计算距离矩阵 d i j d_{ij} dij
    2)确定邻域截断距离 d c d_{c} dc
    3)计算局部密度 ρ i ρ_{i} ρi 和相对距离 δ i δ_{i} δi
    4)绘制决策图,选取聚类中心点;
    5)对非聚类中心数据点进行归类,聚类结束。
    最后可以将每个簇中的数据点进一步分为核心点和边缘点两个部分,并检测噪声点。其中,核心点是类簇核心部分,其 ρ ρ ρ 值较大;边缘点位于类簇的边界区域且 ρ ρ ρ 值较小,两者的区分界定则是借助于边界区域的平均局部密度。

    1.4 DPC算法的优缺点

    优点:
    1)不需要事先指定类簇数;
    2)能够发现非球形类簇;
    3)只有一个参数需要预先取值。
    缺点:
    1)当类簇间的数据密集程度差异较大时,DPC算法并不能获得较好的聚类效果;
    2)DPC算法的样本分配策略存在分配连带错误。

    二、改进的DPC算法及其论文

    2.1 局部密度和相对距离的定义

    1. 引入k近邻(KNN)思想计算局部密度。当样本类簇密集程度相差较大时,全局范围内密度较高的点可能均存在于密集类簇中,这将难以发现正确的密度峰值;另外,每个类簇中的密度峰值,它的密度是所在类簇中密度较高的样本,即局部范围内密度较高的样本。因此,样本与其近邻点的相对密度可更加准确地反映该样本是否能成为类簇中心[1]。
    2. 引入共享近邻(SNN)思想计算局部密度和相对距离。前者通过计算两个点之间的共享邻居的数量快速准确地识别和分配肯定属于一个集群的点;后者通过查找更多邻居所属的簇来分配剩余的点。

    2.2 截断距离的调整

    1. 针对截断距离参数的确定问题,构造关于截断距离参数的局部密度信息熵,通过最小化信息熵自适应地确定截断距离参数[3]。
    2. 寻找使基尼系数取得最小值时所对应的截断距离,并且将优化后的截断距离作为下一步聚类的基础,代替人工选取截断距离[4]。
    3. 建立以ACC指标为目标函数的优化问题,利用鲸鱼优化算法对目标函数进行优化,寻找最佳的截断距离[5]。

    2.3 聚类中心的获取方法

    1. 针对聚类中心的确定问题,利用从非聚类中心到聚类中心数据点局部密度和距离的乘积,存在明显跳跃这一特征确定阈值,从而能自动确定聚类中心[3]。
    2. 根据决策图和簇中心权值排序图提出自动选取聚类中心的策略[4]。
    3. 利用加权的局部密度和相对距离乘积的斜率变化趋势实现聚类中心的自动选择[5]。
    4. 基于KL散度的参数指标,用于描述数据集点与其他点γ值的差异度之和,差异度越大,值越趋近于0[6]。

    2.4 制定新的分配规则

    1. 定义新的数据点间邻近程度的度量准则。采用k近邻思想寻找密度峰值,将密度峰值的k个近邻点分配给其对应类簇,对所有已分配数据点寻找相互邻近度最高的未分配数据点,将未分配数据点分配给已分配数据点所在类簇[1]。
    2. 提出两种基于K近邻的样本分配策略,依次分配样本到相应类簇中心[7]。

    2.5 改进距离矩阵

    由于所使用的数据集的量纲存在不统一的问题和数值的数量级对数据分布和类别划分有一定影响,采用马氏距离替代原算法中的欧式距离来消除这种影响[2]。

    三、聚类效果及其MATLAB代码

    通过计算样本的局部密度和相对距离绘制决策图如图1所示。图中分布在右上角的样本具有非常高的 δ δ δ 值和 ρ ρ ρ 值,可以考虑选择这三个样本为密度峰值点,即聚类中心点。
    在这里插入图片描述
    为了更准确的选择密度峰值点作为聚类中心点,可以对决策值 γ γ γ 进行降序排列如图2所示,进而选择前 k k k γ γ γ 值最大的数据点作为聚类中心点。
    在这里插入图片描述
    从图中可以看出,聚类中心点的数目为3,可以通过程序确定 γ γ γ 进行降序排列前的样本点所在下标,继而找到这三个聚类中心点。
    数据集最终的聚类效果如下:
    在这里插入图片描述

    clc;
    clear;
    close all;
    
    load x;
    load Feature;
    x = Feature';
    dc = 0.5;           % 邻域截断距离
    s = 2;              % 选择局部密度的计算方式
    [rho,delta,gamma,cluster] = DPC(x,dc,s);
    
    figure;
    plot(rho,delta,'bo');
    xlabel('\rho','FontAngle','italic','FontName','Times New Roman','FontWeight','bold','FontSize',14);
    ylabel('\delta','FontAngle','italic','FontName','Times New Roman','FontWeight','bold','FontSize',14);
    box off;
    
    figure;
    plot(gamma,'r-o');
    xlabel('n','FontAngle','italic','FontName','Times New Roman','FontWeight','normal','FontSize',14);
    ylabel('\gamma','FontAngle','italic','FontName','Times New Roman','FontWeight','bold','FontSize',14);
    box off;
    ShowClusterResult(x, cluster);
    
    

    数据集以及完整代码见链接:密度峰值聚类算法(DPC)MATLAB代码

    参考文献

    [1] 赵嘉, 姚占峰, 吕莉, 等. 基于相互邻近度的密度峰值聚类算法[J]. 控制与决策, 2021, 36(3): 543-552.
    [2] 辜振谱, 刘晓波, 韩子东, 等. 基于改进密度峰值聚类的航空发动机故障诊断[J]. 计算机集成制造系统, 2020, 26(5): 1211-1217.
    [3] 王军华, 李建军, 李俊山, 等. 自适应快速搜索密度峰值聚类算法[J]. 计算机工程与应用, 2019, 55(24): 122-127.
    [4] 吴斌, 卢红丽, 江惠君. 自适应密度峰值聚类算法[J]. 计算机应用, 2020, 40(6): 1654-1661.
    [5] 王芙银, 张德生, 张 晓. 结合鲸鱼优化算法的自适应密度峰值聚类算法[J]. 计算机工程与应用, 2021, 57(3): 94-102.
    [6] 丁志成, 葛洪伟, 周 竞. 基于KL散度的密度峰值聚类算法[J]. 重庆邮电大学学报(自然科学版), 2019, 31(3): 367-374.
    [7] 谢娟英, 高红超, 谢维信. K近邻优化的密度峰值快速搜索聚类算法[J]. 中国科学:信息科学, 2016, 46(2): 258-280.
    [8] LIU R, WANG H, YU X. Shared-nearest-neighbor-based clustering by fast search and find of density peaks[J]. Information Sciences, 2018, 450: 200-226.

    展开全文
  • 一种通过快速搜索和查找密度峰值聚类算法 来自科学的原始论文 《通过快速搜索和查找密度峰值进行聚类》 包括 这个集群存储库包括一个名为rawdata.dat的数据集和一个用于集群这些数据的算法。 原始样本分布,如下面...
  • 密度峰值聚类介绍与matlab实现

    千次阅读 2021-01-03 23:14:22
    2014年6⽉,Alex Rodriguez和Alessandro Laio在Science上发表了⼀篇名《Clustering by fast search and find of density peaks》的文章,提供了⼀种简洁而优美的聚类算法,是⼀种基于密度的聚类方法,可以识别各种...

    1、算法简介:

            2014年6⽉,Alex Rodriguez和Alessandro Laio在Science上发表了⼀篇名《Clustering by fast search and find of density peaks》的文章,提供了⼀种简洁而优美的聚类算法,是⼀种基于密度的聚类方法,可以识别各种形状的类簇,并且参数很容易确定。它克服了DBSCAN中不同类的密度差别大、邻域范围难以设定的问题,鲁棒性强。

    2、算法对于数据集的假设:

            在这个算法中对数据集有两条假设:

                    1.数据集在空间分布并不均匀,数据中局部高密度点被一些局部低密度点包围

                    2.数据集中局部高密度点之间的相对距离较大

    3、算法相关公式:

            1)密度计算:  \rho_i=\sum_{j}\chi (d_{ij}-d_c)其中,密度计算有两种计算方式:1.传统的欧式距离计算距离,将距离小于点的数量直接作为密度,2.计算欧式距离并计算高斯函数值,将所有点值的和作为密度。

     2)局部高密度点距离计算:,当dij是密度最高的点时:

    4、算法过程

    1)计算数据密度

    根据设定的截断距离d_c,计算每个数据点的局部密度\rho_i

    2)局部高密度点距离

    计算每个点到高于自身局部密度值点的最小距离。得到\delta_i

    3)根据密度与距离估计中心点

    对每⼀个点,绘制出局部密度\rho_i与高局部密度点距离\delta_i的散点图

    可以看出上图中的大部分数据都具有较小的距离,但是有一些数据有着较大的距离与密度,这样的点我们选择为聚类中心点。同时将有着较高距离较低密度的点确定为异常点

    4)划分剩余数据点(聚类过程)

    把每个数据点归类到比他们的密度更大的最相近的类中心所属的类别中。

    代码实现:

    1)密度计算

    %% 密度计算函数
    function data_density=cal_density(data,cut_dist)
        data_len=size(data,1);
        data_density=zeros(1,data_len);
        for idata_len=1:data_len
            temp_dist=pdist2(data,data(idata_len,:));
            data_density(idata_len)=sum(exp(-(temp_dist./cut_dist).^2));
        end
    end

    2)距离计算

    %% 计算delta
    function data_delta=cal_delta(data,data_density)
        data_len=size(data,1);
        data_delta=zeros(1,data_len);
        for idata_len=1:data_len
            index=data_density>data_density(idata_len);
            if sum(index)~=0
                data_delta(idata_len)=min(pdist2(data(idata_len,:),data(index,:)));
            else
                data_delta(idata_len)=max(pdist2(data(idata_len,:),data));
            end
        end
    end

    3)聚类中心点寻找

    %% 寻找聚类中心点
    function [center,center_index]=find_center(data,data_delta,data_density,cut_dist)
        R=data_density.*data_delta;
        [sort_R,R_index]=sort(R,"descend");
        gama=abs(sort_R(1:end-1)-sort_R(2:end));
        [sort_gama,gama_idnex]=sort(gama,"descend");
        gmeans=mean(sort_gama(2:end));
        %寻找疑似聚类中心点
        temp_center=data(R_index(gama>gmeans),:);
        temp_center_index=R_index(gama>gmeans);
        %进一步筛选中心点
        temp_center_dist=pdist2(temp_center,temp_center);
        temp_center_len=size(temp_center,1);
        center=[];
        center_index=[];
        %判断中心点之间距离是否小于2倍截断距离并中心点去重
        for icenter_len=1:temp_center_len
            temp_index=find(temp_center_dist(icenter_len,:)<2*cut_dist);
            [~,max_density_index]=max(data_density(temp_center_index(temp_index)));
            if sum(center_index==temp_center_index(temp_index(max_density_index)))==0
                center=[center;temp_center(temp_index(max_density_index),:)];
                center_index=[center_index,temp_center_index(temp_index(max_density_index))];
            end
            % center(icenter_len,:)=temp_center(temp_index(max_density_index),:);
        end
    end

    4)聚类过程

    %% 聚类算法
    function cluster=Clustering(data,center,center_index,data_density)
        data_len=size(data,1);
        data_dist=pdist2(data,data);
        cluster=zeros(1,data_len);
        % 标记中心点序号
        for i=1:size(center_index,2)
            cluster(center_index(i))=i;
        end
        % 对数据密度进行降序排序
        [sort_density,sort_index]=sort(data_density,"descend");
        for idata_len=1:data_len
            %判断当前数据点是否被分类
            if cluster(sort_index(idata_len))==0
                near=sort_index(idata_len);
                while 1
                    near_density=find(data_density>data_density(near));
                    near_dist=data_dist(near,near_density);
                    [~,min_index]=min(near_dist);
                    if cluster(near_density(min_index))
                        cluster(sort_index(idata_len))=cluster(near_density(min_index));
                        break;
                    else
                        near=near_density(min_index);
                    end
                end
            end
        end
    end

    完整代码:峰值聚类算法(matlab)_matlab密度峰值聚类算法-机器学习文档类资源-CSDN下载

    展开全文
  • 基于密度峰值的快速聚类算法matlab中的实现
  • 密度峰值聚类算法——心得总结

    千次阅读 2018-10-16 16:56:00
    这是离开公司前做的最后一个算法,之前做的一些算法,由于老大的指点,少走了很多弯路,密度峰值聚类这个是纯粹自己做的,走了很多弯路,在这里和大家分享借鉴一下,共勉! 一、简单介绍及原理 顾名思义,这是一...

    这是离开公司前做的最后一个算法,之前做的一些算法,由于老大的指点,少走了很多弯路,密度峰值聚类这个是纯粹自己做的,走了很多弯路,在这里和大家分享借鉴一下,共勉!

     

    一、简单介绍及原理

    顾名思义,这是一种基于密度的聚类算法,以高密度区域作为判断依据,这种非参数的方法,和传统方法比,适用于处理任何形状的数据集,而且无需提前设置簇的数量。

    这里提到一个聚类中心的概念:类簇的中心是由一些局部密度较低的点所围绕,且这些点距离其他高密度的点的距离都比较远,通过计算最近邻的距离,得到聚类中心,并依据密度大小进行排列。

    我在这里借鉴了——马春来,单洪,马涛.一种基于簇中心点自动选择策略的密度峰值聚类算法.计算机科学.2016,43(7)。这个文献中提供了一种自动选择策略的方法,大家有兴趣可以看一下。

    对于一个数据集D={p1,p2,……pn}的点pi,计算每个点的局部密度ρi和相邻密度点的距离di,这里提出一个概念,簇中心权值:γi= ρi * di  。

    通过将簇中心权值降序排列,我们可以通过下降的趋势(斜率)找出拐点所在。

    下图为选择聚类中心的方法

    省略了不少东西,大家可以下载那份文献自己细细研读。

     

    二、一些遇到的问题及我的心得

    1、有现成的代码固然好,但是别人的代码解决的问题终归和你的问题不一样。不如自己从头到尾撸一遍,结合自己的情况进行修改。

    2、传统的密度峰值聚类需要自己设置参数,稍微加以改进可以扔掉参数,让它自己迭代。

    3、为什么要将密度和距离相乘:这样可以避免某一项的值过小,导致特征不明显

    4、注意归一化的问题,具体情况具体对待。(在归一化这个问题坑了我蛮久)

    5、拐点的确定问题,在算法构建的初始阶段,最好人工重复确认一下,避免盲目自信到后面找不到问题所在。

    6、若某两个或多个聚类点距离较近,将其归为一个同一个聚类中心。



     

    转载于:https://www.cnblogs.com/bo-liang/p/9799034.html

    展开全文
  • 对于样本的聚类,K均值聚类是最基础,也是最常用的的几个方法之一,但是K均值聚类有很多问题,比如说不能普适于非球形分布问题、不能确定类的数量的问题等等,本文介绍的基于密度峰值聚类方法就可以非常方便的解决...
  • k-means,DB-SCAN,基于密度峰值聚类算法matlab简单实践
  • 周围计算matlab代码DLORE-DP Dense Members of Local Cores-based Density ...用于绘制聚类结果。 SNNDPC2.m 包含我们在实验中比较的 SNN-DPC 算法。 合成数据集 pacake 包括我们在实验中使用的合成数据集
  • 基于密度聚类算法(如:DBSCAN)

    万次阅读 2018-07-09 12:54:12
    由于聚类是无监督学习方法,不同的聚类方法基于不同的假设和数据类型,比如...聚类算法很多,包括基于划分的聚类算法(如:k-means),基于层次的聚类算法(如:BIRCH),基于密度聚类算法(如:DBSCAN),基于...
  • matlab代码如下 图像最好小一点,不然因为那个距离矩阵为(mn)(m*n)真的很慢很慢,运算上亿次了,电脑根本跑不动。 clear close all Iy=imread('tomato.jpg'); figure;imshow(Iy); I = imresize(Iy,[53 33]); ...
  • 完整代码已上传我的资源:【图像分割】基于K-means聚类算法图像分割【含Matlab源码 1476期】 获取代码方式2: 通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。 获取代码方式3: 通过订阅紫...
  • 一、基于密度聚类算法的概述 二、
  • 1.掌握K均值聚类算法的原理和实现过程; 2.掌握K均值聚类算法的应用方法。 二、 实验内容 1.彩色图像分割 选择一幅图像,分别按三种颜色数进行彩色图像分割的结果(原图和分割图)。步骤如下: (1) 第一步:读入一幅...
  • 通过快速搜索和寻找密度峰值进行聚类 你好,欢迎你来看这篇小文章! 本篇的内容是对2014年发表在science上的论文Clustering by fast search and find of density peaks论文的概述和用Python代码的实现,希望能对你...
  • CFSFDP聚类算法

    千次阅读 2021-04-26 19:33:25
    1 聚类算法总结 常用的聚类算法包括: (1)启发式分割算法:起始确定K个中心点,用距离公式来判断数据点归属,用代价函数(如最小化平方和)评价聚类结果,迭代直至最优,例如:K-Means,K-Medoids。 (2).
  • 关于超像素分割和密度聚类(CFSFDP)的学习
  • 周围计算matlab代码基于自适应密度的无监督高光谱遥感图像聚类 这个 repo 包含我对我们的论文“基于自适应密度的无监督高光谱遥感图像聚类”的实现。 执行 这些代码最初来自于 Science 2014 的“Clustering by fast ...
  • matlab + ldp代码LDP-MST Matlab代码“基于局部密度峰值的...LMSTCLU_OPT.m用于对局部簇进行聚类基于MST的聚类算法计算密度峰值。 drawcluster2用于绘制聚类结果。 综合数据集pacake包括我们在实验中使用的综合数据集
  • 最近在学习密度峰值聚类算法,相对此算法进行改进然后出一篇论文。于是乎在github上开始搜索,发现了/DensityPeakCluster写的算法。down下来进行学习,对代码中加了一些中文注释,方便日后自己查看。原算法地址如上...
  • 算法设计:基于密度聚类方法

    千次阅读 2018-08-24 16:22:24
    由于数据的类型和大小已经超出了人们传统手工处理的能力范围,聚类,作为一种最常见的无监督学习技术,可以帮助人们给数据自动打标签,已经获得了广泛应用。聚类的目的就是把不同的数据点按照它们的相似与相异度分割...
  •  最近在Science上的一篇基于密度聚类算法《Clustering by fast search and find of density peaks》引起了大家的关注(在我的博文“机器学习算法(聚类算法)-基于密度峰值聚类算法”中也进行了中文的描述)。...
  • 本程序为M文件,运行环境为matlab, 也可通过matlab转化为C++运行。实现功能:可实现医学图像的自动分割!
  • FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则是一种...
  • dp算法源代码matlab 比较密度峰 该存储库将提供比较密度峰值算法的源代码。 demo.m脚本展示了 DP 和 CDP 算法的决策图以及聚类性能。 代码在 Matlab 2017a 中测试。

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 272
精华内容 108
关键字:

密度峰值聚类算法matlab

matlab 订阅
友情链接: fdjtx.rar