数学建模学习笔记(清风)——聚类模型

目录

基础部分:

适用范围:

聚类算法的分类:

步骤 :

        选择聚类算法优先级:

        DBSCAN算法的步骤:

        系统聚类步骤:

        K-mean聚类步骤:

注意事项

Spss实现系统聚类和K-mean聚类、matlab实现DBSCAN聚类:

系统聚类:

K-mean聚类:

KBSCAN聚类matlab算法:

基础部分:

适用范围:

        已知数据,但分类未知

聚类算法的分类:

        1、K-mean聚类算法;

        2、系统聚类;

        3、DBSCAN算法;

步骤 :

        选择聚类算法优先级:

                1、观察数据是否为二维数据,是否有特殊的图形,以确定是否使用DBSCAN算法

                2、如果是多维数据,优先选择系统聚类

                3、无需过多解释,可以使用K-mean聚类算法

        DBSCAN算法的步骤:

        1、确定MinPts和Eps两个参数;

        2、随机选择一个样本点,然后以样本点为原点,以Eps为半径画圆,分别以包含的样本点为圆心,以Eps为半径画圆,直至最后所画的圆不包含任一样本点,得到第一个分类,然后循环这一过程以确定不同的分类;

        系统聚类步骤:

                1、首先假设每个样本点为一个类(或簇)

                2、然后将有着最近距离的两个类归为一类;

                3、循环上述过程直至将所有类别归至一类

        K-mean聚类步骤:

                1、给定聚类数k和聚类中心

                2、确定样本点所属类别

                3、调整各聚类中心,直到其对应的样本点离其距离之和最小,然后再确定样本点的分类

                4、循环上述操作,直至聚类中心不再移动

注意事项;

        1、数据量纲不同时,要先将个数据标准化,

        2、最后要将标准化的数据进行复原,就是标准化的逆过程

Spss实现系统聚类和K-mean聚类、matlab实现DBSCAN聚类:

系统聚类:

K-mean聚类:

KBSCAN聚类matlab算法:

%主函数:

clc;

clear;

close all;

%% Load Data

load mydata;



%% Run DBSCAN Clustering Algorithm

syms A ;   %接着给A导入数据

epsilon=0.5;

MinPts=10;

IDX=DBSCAN(A,epsilon,MinPts);



%% Plot Results

% 如果只有两个变量,使用以下两行代码画出特有图形

% PlotClusterinResult(X, IDX);

% title(['DBSCAN Clustering (\epsilon = ' num2str(epsilon) ', MinPts = ' num2str(MinPts) ')']);



%DBSCAN函数代码:

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

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值