聚类算法模型

来源:数学建模清风学习内容整理


分类是已知类别的,聚类是未知的

  • K均值法需要自己定义分几类(K类)
  • 系统聚类可以先聚类,然后再根据聚合系数来确定分几类

在这里插入图片描述


K-means聚类


算法模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


SPSS操作

  • 需要统一量纲
  • 迭代次数可以视情况增多以达到收敛效果好
    在这里插入图片描述

在这里插入图片描述
可以利用SPSS来对数据标准化


系统(层次)聚类

算法模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 距离近的样品聚为一类
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

类间距离
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


SPSS操作

在这里插入图片描述

在这里插入图片描述


确定分几类:用图形估计聚类的数量

在这里插入图片描述

  • 使用SPSS进行系统聚类可以得到聚类系数
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 按不同指标个数可以画不同维度的图
    可以调整颜色!!!

在这里插入图片描述


DBSCAN算法

:具有噪声的基于密度的聚类算法

  • K均值、系统聚类是基于距离,DBSCAN是基于密度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

matlab实现

  • 主函数
clc;
clear;
close all;

%% Load Data

load mydata;


%% Run DBSCAN Clustering Algorithm

epsilon=0.5;     %聚类半径
MinPts=10;       %最小聚类点:大于Minpts才能分为一类
IDX=DBSCAN(X,epsilon,MinPts);


%% Plot Results
% 如果只要两个指标的话就可以画图啦
PlotClusterinResult(X, IDX);
title(['DBSCAN Clustering (\epsilon = ' num2str(epsilon) ', MinPts = ' num2str(MinPts) ')']);
  • 被调用的DBCSCAN函数:
function [IDX, isnoise]=DBSCAN(X,epsilon,MinPts)

    C=0;
    
    n=size(X,1);
    IDX=zeros(n,1);  % 初始化全部为0,即全部为噪音点
    
    D=pdist2(X,X);
    
    visited=false(n,1);
    isnoise=false(n,1);
    
    for i=1:n
        if ~visited(i)
            visited(i)=true;
            
            Neighbors=RegionQuery(i);
            if numel(Neighbors)<MinPts
                % X(i,:) is NOISE
                isnoise(i)=true;
            else
                C=C+1;
                ExpandCluster(i,Neighbors,C);
            end
            
        end
    
    end
    
    function ExpandCluster(i,Neighbors,C)
        IDX(i)=C;
        
        k = 1;
        while true
            j = Neighbors(k);
            
            if ~visited(j)
                visited(j)=true;
                Neighbors2=RegionQuery(j);
                if numel(Neighbors2)>=MinPts
                    Neighbors=[Neighbors Neighbors2];   %#ok
                end
            end
            if IDX(j)==0
                IDX(j)=C;
            end
            
            k = k + 1;
            if k > numel(Neighbors)
                break;
            end
        end
    end
    
    function Neighbors=RegionQuery(i)
        Neighbors=find(D(i,:)<=epsilon);
    end

end

  • 被调用的画图函数
function PlotClusterinResult(X, IDX)

    k=max(IDX);

    Colors=hsv(k);

    Legends = {};
    for i=0:k
        Xi=X(IDX==i,:);
        if i~=0
            Style = 'x';
            MarkerSize = 8;
            Color = Colors(i,:);
            Legends{end+1} = ['Cluster #' num2str(i)];
        else
            Style = 'o';
            MarkerSize = 6;
            Color = [0 0 0];
            if ~isempty(Xi)
                Legends{end+1} = 'Noise';
            end
        end
        if ~isempty(Xi)
            plot(Xi(:,1),Xi(:,2),Style,'MarkerSize',MarkerSize,'Color',Color);
        end
        hold on;
    end
    hold off;
    axis equal;
    grid on;
    legend(Legends);
    legend('Location', 'NorthEastOutside');

end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苗半里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值