数学建模笔记-第十讲-聚类

文章目录

  • 聚类模型
  • K-means聚类算法
    • k-means++算法
  • SPSS操作
    • 一些讨论
  • 系统聚类
    • 举例
      • 题目
      • 如何分类
      • 常用距离
      • 指标与指标之间的距离
      • 类与类之间的距离
    • 过程
    • 最短距离系统聚类
      • 说明
    • SPSS操作
    • 确定聚类数量
    • 演示一下怎么画图
  • DBSCAN算法
    • 演示
    • 基本概念
    • 代码
    • 优缺点
  • 课后作业

清风课程笔记 正课第十讲

聚类模型

数学建模笔记-第十讲-聚类_第1张图片

K-means聚类算法

数学建模笔记-第十讲-聚类_第2张图片

数学建模笔记-第十讲-聚类_第3张图片
数学建模笔记-第十讲-聚类_第4张图片

k-means++算法

  • k-means++主要是使初始的聚类中心距离尽可能远,这种方法解决了对初值敏感的问题
  • 这样就很可能让一个孤立点自成一类
  • 解决了受异常点影响的问题

数学建模笔记-第十讲-聚类_第5张图片

SPSS操作

数学建模笔记-第十讲-聚类_第6张图片

  • 结果

数学建模笔记-第十讲-聚类_第7张图片
数学建模笔记-第十讲-聚类_第8张图片
数学建模笔记-第十讲-聚类_第9张图片

一些讨论

数学建模笔记-第十讲-聚类_第10张图片

  • k取值看怎样效果好,好解释
  • 如果题目中数据量纲(单位)不同时,要先标准化
  • 标准化结果

数学建模笔记-第十讲-聚类_第11张图片

  • 再用这些数据去标准化
  • 标准化还原聚类中心
    • 只要乘标准差再+均值就行

tips:数据多的时候论文中可以先加一个描述统计

数学建模笔记-第十讲-聚类_第12张图片

系统聚类

不用我们在开始时确定k值

举例

题目

数学建模笔记-第十讲-聚类_第13张图片
数学建模笔记-第十讲-聚类_第14张图片

  • 两个例子,一个是对样本进行分类,一个是对指标进行分类(比较罕见)

数学建模笔记-第十讲-聚类_第15张图片

如何分类

  • 只考虑一个指标
    • 找最相近的两个点,归为一类,计算重心(重心跟其他的点一样,相互计算距离)
    • 然后再找最相近的两个点,归为一类
    • 不断迭代

数学建模笔记-第十讲-聚类_第16张图片

  • 只考虑两个指标
    • 原理同上

数学建模笔记-第十讲-聚类_第17张图片

  • 分类准则

数学建模笔记-第十讲-聚类_第18张图片

常用距离

数学建模笔记-第十讲-聚类_第19张图片

  • 绝对值距离:网状道路常用
  • 欧式距离:常用
  • 下面三种用的较少

数学建模笔记-第十讲-聚类_第20张图片

  • 这里只计算了一次,实际上每两个样本之间都要算一次距离

指标与指标之间的距离

数学建模笔记-第十讲-聚类_第21张图片

  • 如例2一样对指标分类的题目较少
  • 所以用到了再学

类与类之间的距离

常用距离不同的是,这里有了类的概念,而不只是一个个的样本点

数学建模笔记-第十讲-聚类_第22张图片

  • 最短距离法

数学建模笔记-第十讲-聚类_第23张图片

  • 最长距离法

数学建模笔记-第十讲-聚类_第24张图片

  • 组间平均连接法

数学建模笔记-第十讲-聚类_第25张图片

  • 组内平均连接法

数学建模笔记-第十讲-聚类_第26张图片

  • 重心法

数学建模笔记-第十讲-聚类_第27张图片

常用组间、组内,也会用重心法,实际上只要解释的通就行

过程

数学建模笔记-第十讲-聚类_第28张图片

  • 论文中要自己做一张跟这个不同的图

最短距离系统聚类

数学建模笔记-第十讲-聚类_第29张图片

  • D是对称矩阵,各样本间距离
  • 每个样本看作一个类,距离最小的两个类聚为一类
  • 计算该类和剩余几类的距离(这里算得是最短距离),得到新的距离矩阵

数学建模笔记-第十讲-聚类_第30张图片

  • 之后就是重复上述步骤
  • 循环两次

数学建模笔记-第十讲-聚类_第31张图片
数学建模笔记-第十讲-聚类_第32张图片

直到最后只有一类,最后聚类

  • 聚类谱系图

数学建模笔记-第十讲-聚类_第33张图片

  • 最后想聚多少类,只要根据图倒推就行

说明

数学建模笔记-第十讲-聚类_第34张图片

  • 这是最长距离聚类的结果,可以看到跟最短距离聚类是不同的
  • 实际上,只要聚类的结果能够解释的通,我们就可以选择那个方法来进行聚类

数学建模笔记-第十讲-聚类_第35张图片

  • 逻辑上聚类不太明白,需要我们自己对结果做一个合理的解释,说明每个类的含义是啥
  • 说明

数学建模笔记-第十讲-聚类_第36张图片

SPSS操作

数学建模笔记-第十讲-聚类_第37张图片

数学建模笔记-第十讲-聚类_第38张图片

  • SPSS的谱系图先将一些靠在一起

确定聚类数量

肘部法则

数学建模笔记-第十讲-聚类_第39张图片

  • 这里的绝对值只是距离的记号,不是求绝对值

  • 各个类的畸变程度

  • 各个类畸变程度相加->所有类总的畸变程度(我们要的就是这个)

  • k越大,聚合程度减小(最极端就是一个样本就是一个类,那么很多类的畸变程度都是0)

数学建模笔记-第十讲-聚类_第40张图片
数学建模笔记-第十讲-聚类_第41张图片

  • SPSS软件中表的系数就是聚合系数,复制到excel,降序
    • 一般要选择匹配目标格式
  • 插入散点图(肘部图)
  • 美化图
  • 分析解释,两种解释中选一种就行
    • 其中k=3也好解释,
    • 消费可以分为高消费、中消费、低消费
  • 这里写在论文中可以辅助确定k值,还是有一定意义的

解释:

(1)根据聚合系数折线图可知,当类别数为5时,折线的下降趋势趋缓,故可将类别数设定为5.
(2)从图中可以看出, K值从1到5时,畸变程度变化最大。超过5以后,畸变程度变化显著降低。因此肘部就是 K=5,故可将类别数设定为5.(当然,K=3也可以解释)

确定K后画图

演示一下怎么画图

数学建模笔记-第十讲-聚类_第42张图片

数学建模笔记-第十讲-聚类_第43张图片

这里8个指标肯定画不了,只是演示一下2或3个指标怎么画

spss->图形-> 图表构造器

把图 指标拖进去

组合点( 勾选可以加一个点标签

其他可以双击图进行修改,比如修改点颜色、背景颜色(填充改白色)、边框(黑色)、文本说明(右上角:类别编号)

DBSCAN算法

演示

DBSCAN算法:具有噪声的机遇密度的聚类方法

k均值算法与系统聚类算法是基于距离的

而DBSACAN是基于密度的聚类算法

  • 举个例子
  • 上次用k-means算法对笑脸图做出来的聚类

数学建模笔记-第十讲-聚类_第44张图片

  • 用DBSCAN算法

数学建模笔记-第十讲-聚类_第45张图片

数学建模笔记-第十讲-聚类_第46张图片

  • 缩小DBSCAN算法搜索圈的半径

数学建模笔记-第十讲-聚类_第47张图片

  • 所以这个算法跟以下有关
    • 数据
    • 参数
  • 可以发现噪声
    • 比如类似验证码识别一样,聚类出来字母

数学建模笔记-第十讲-聚类_第48张图片

基本概念

数学建模笔记-第十讲-聚类_第49张图片

三类数据点

  • 核心点:A
  • 边界点:B、C
  • 噪音点:N

所有的点都试探一遍

代码

  • 伪代码形式

数学建模笔记-第十讲-聚类_第50张图片

  • matlab代码在资料中
%
% Copyright (c) 2015, Yarpiz (www.yarpiz.com)
% All rights reserved. Please read the "license.txt" for license terms.
%
% Project Code: YPML110
% Project Title: Implementation of DBSCAN Clustering in MATLAB
% Publisher: Yarpiz (www.yarpiz.com)
% 
% Developer: S. Mostapha Kalami Heris (Member of Yarpiz Team)
% 
% Contact Info: [email protected], [email protected]
%

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
                    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

优缺点

数学建模笔记-第十讲-聚类_第51张图片

  • 就两个指标,画出散点图,发现可以分为几块,适合DBSCAN,一般用不到
  • 其他的一般用系统聚类
    • 可以写的东西多
    • 树状图
    • 肘部图折线图确定k值

课后作业

数学建模笔记-第十讲-聚类_第52张图片

  • 代码查重最好用的就是修改注释、修改变量名

本笔记来自清风老师的数学建模,强烈推荐该课程!

你可能感兴趣的:(数学建模笔记,聚类,算法,机器学习,数学建模)