数学建模----聚类分析

article/2025/8/23 9:49:41

聚类分析概念

聚类分析是根据给出数据中发现描述对象及关系的信息,对数据对象进行分组的过程。

聚类是一种寻找数据之间内在结构的技术,聚类把全体数据实例组织成一些相似组,这些相似组被称作簇,处于相同簇中的数据实例彼此相同(相关),处于不同簇中的实例彼此不同的(不相关)。

聚类分析是一种无监督学习,与监督学习不同的是,簇中表示数据类别分类或者信息是没有的,是对位置类别的样本进行划分,按照一定的规则划分为若干个簇类,揭示其中存在的规律。

在数学建模中,聚类分析可以应用在数据预处理过程中,对于复杂结构的多维数据可以通过聚类分析的方法对数据进行聚集,使复杂结构数据标准化。聚类分析还可以用来发现数据项之间的依赖关系,从而去除或合并有密切依赖关系的数据项。聚类分析也可以为某些数据挖掘方法(如关联规则、粗糙集方法),提供预处理功能。在商业类问题上,聚类分析是细分市场的有效工具,被用来发现不同的客户群,并且它通过对不同的客户群的特征的刻画,被用于研究消费者行为,寻找新的潜在市场等等。

聚类分析算法

聚类分析算法主要分为五大类:基于划分的聚类方法、基于层次的聚类方法、基于密度的聚类方法、基于网格的聚类方法和基于模型的聚类方法。

  1. 基于划分的聚类(k‐均值算法、k‐medoids算法、k‐prototype算法)
  2. 基于层次的聚类
  3. 基于密度的聚类(DBSCAN算法、OPTICS算法、DENCLUE算法)
  4. 基于网格的聚类
  5. 基于模型的聚类(模糊聚类、Kohonen神经网络聚类)

数学建模常用算法

聚类分析算法有很多种,在数学建模中基于划分的聚类方法是最常用的,本文主要介绍K-means聚类。

k‐均值聚类算法,通过计算样本点与类簇质心的距离,将类簇质心相近的样本点划分为同一类簇。并通过样本间的距离来衡量它们之间的相似度,两个样本距离越远,则相似度越低,反之相似度越高。

k-均值算法:

  1. 选择 K 个初始质心(K需要用户指定),初始质心随机选择即可,每一个质心为一个类
  2. 对剩余的每个样本点,计算它们到各个质心的欧式距离,并将其归入到相互间距离最小的质心所在的簇。计算各个新簇的质心。
  3. 在所有样本点都划分完毕后,根据划分情况重新计算各个簇的质心所在位置,然后迭代计算各个样本点到各簇质心的距离,对所有样本点重新进行划分
  4. 重复2. 和 3.,直到质心不在发生变化时或者到达最大迭代次数时

k-均值算法优缺点

  1. k‐均值算法原理简单,容易实现,且运行效率比较高(优点)
  2. k‐均值算法聚类结果容易解释,适用于高维数据的聚类(优点)
  3. k‐均值算法采用贪心策略,导致容易局部收敛,在大规模数据集上求解较慢(缺点)
  4. k‐均值算法对离群点和噪声点非常敏感,少量的离群点和噪声点可能对算法求平均值产生极大影响,从而影响聚类结果(缺点)
  5. k‐均值算法中初始聚类中心的选取也对算法结果影响很大,不同的初始中心可能会导致不同的聚类结果。对此,研究人员提出k‐均值++算法,其思想是使初始的聚类中心之间的相互距离尽可能远
     

k‐均值++算法:

  1. 从样本中随机选择一个样本点ܿx1作为第一个聚类中心
  2. 计算其它样本点x到最近的聚类中心的距离݀d(x)
  3. 以概率\frac{d(x)^{2}}{\sum d(x)^{2}}选择一个新样本点x2加入聚类中心集合中,其中距离值越大,被选中的概率就越高
  4. 重复2和3选定k个聚类中心
  5. 基于这k个聚类中心进行k-均值运算

k‐均值++算法的优缺点

  1. 提高局部最优点质量,收敛更快(优点)
  2. 相比随机选择中心点计算较大(缺点)

聚类分析评估

聚类分析评估是聚类过程的最后一步

聚类过程

  1. 数据准备:包括特征标准化和降维;
  2. 特征选择:从最初的特征中选择最有效的特征,并将其存储于向量中;
  3. 特征提取:通过对所选择的特征进行转换形成新的突出特征;
  4. 聚类(或分组):首先选择合适特征类型的某种距离函数(或构造新的距离函数)进行接近程度的度量,而后执行聚类或分组;
  5. 聚类结果评估:是指对聚类结果进行评估,评估主要有3种:外部有效性评估、内部有效性评估和相关性测试评估。

一个良好的聚类算法应具备良好的可伸缩性,处理不同的类型数据的能力,处理噪声数据的能力,对样本数据顺序的不敏感性,约束条件下良好的表现,易解释性和易用性。

聚类分析结果的好坏可以从内部指标和外部指标评判:

  • 外部指标指用事先指定的聚类模型作为参考来评判聚类结果的好坏
  • 内部指标是指不借助任何外部参考,只用参与聚类的样本评判聚类结果好坏

案例

五个品种八个属性进行聚类:

% 五个品种八个属性进行聚类
%Matlab程序如下:
X=[7.90    39.77  8.49   12.94  19.27    11.05     2.04    13.29
7.68    50.37  11.35    13.30  19.25    14.59   2.75     14.87
9.42    27.93   8.20    8.14  16.17    9.42     1055     9.76                                                                        
9.16    27.98     9.01      9.32    15.99    9.10     1.82     11.35                                                              
10.06    28.64   10.52    10.05  16.18    8.39     1.96    10.81  ]';
Y=pdist(X);
SF=squareform(Y);
Z=linkage(Y,'average');
dendrogram(Z);
T=cluster(Z,'maxclust',3)

 

K-means聚类matlab代码

function [Idx, Center] = K_means(X, xstart)
% K-means聚类
% Idx是数据点属于哪个类的标记,Center是每个类的中心位置
% X是全部二维数据点,xstart是类的初始中心位置len = length(X);        %X中的数据点个数
Idx = zeros(len, 1);    %每个数据点的Id,即属于哪个类C1 = xstart(1,:);       %第1类的中心位置
C2 = xstart(2,:);       %第2类的中心位置
C3 = xstart(3,:);       %第3类的中心位置for i_for = 1:100%为避免循环运行时间过长,通常设置一个循环次数%或相邻两次聚类中心位置调整幅度小于某阈值则停止%更新数据点属于哪个类for i = 1:lenx_temp = X(i,:);    %提取出单个数据点d1 = norm(x_temp - C1);    %与第1个类的距离d2 = norm(x_temp - C2);    %与第2个类的距离d3 = norm(x_temp - C3);    %与第3个类的距离d = [d1;d2;d3];[~, id] = min(d);   %离哪个类最近则属于那个类Idx(i) = id;end%更新类的中心位置L1 = X(Idx == 1,:);     %属于第1类的数据点L2 = X(Idx == 2,:);     %属于第2类的数据点L3 = X(Idx == 3,:);     %属于第3类的数据点C1 = mean(L1);      %更新第1类的中心位置C2 = mean(L2);      %更新第2类的中心位置C3 = mean(L3);      %更新第3类的中心位置
endCenter = [C1; C2; C3];  %类的中心位置%演示数据
%% 1 random sample
%随机生成三组数据
a = rand(30,2) * 2;
b = rand(30,2) * 5;
c = rand(30,2) * 10;
figure(1);
subplot(2,2,1); 
plot(a(:,1), a(:,2), 'r.'); hold on
plot(b(:,1), b(:,2), 'g*');
plot(c(:,1), c(:,2), 'bx'); hold off
grid on;
title('raw data');%% 2 K-means cluster
X = [a; b; c];  %需要聚类的数据点
xstart = [2 2; 5 5; 8 8];  %初始聚类中心
subplot(2,2,2);
plot(X(:,1), X(:,2), 'kx'); hold on
plot(xstart(:,1), xstart(:,2), 'r*'); hold off
grid on;
title('raw data center');[Idx, Center] = K_means(X, xstart);
subplot(2,2,4);
plot(X(Idx==1,1), X(Idx==1,2), 'kx'); hold on
plot(X(Idx==2,1), X(Idx==2,2), 'gx');
plot(X(Idx==3,1), X(Idx==3,2), 'bx');
plot(Center(:,1), Center(:,2), 'r*'); hold off
grid on;
title('K-means cluster result');disp('xstart = ');
disp(xstart);
disp('Center = ');
disp(Center);

参考文献

https://blog.csdn.net/weixin_43584807/article/details/105539675                                                    

https://zhuanlan.zhihu.com/p/139924042

https://www.bilibili.com/video/BV1kC4y1a7Ee?p=19&vd_source=08ffbcb9832d41b9a520bccfe1600cc9


http://chatgpt.dhexx.cn/article/9cIH4Zgd.shtml

相关文章

【无人机】基于A星算法解决无人机二维路径规划问题含matlab代码

1 内容介绍 无人机路径规划一直是一个比较热门的话题,A星算法以及其扩展性算法被广范地应用于求解无人机的最优路径.该文在研究无人机路径规划算法中,详细阐述了传统A星算法的基本原理,并通过栅格法分割了机器人路径规划区域,利用MATLAB仿真平台生成了无人机二维路径仿真地图对…

机器学习(15)--HED网络预测实现(opencv+python实现边缘检测及源代码百度云资源)

上一篇:机器学习(14)--经典边缘检测canny算法(计算机视觉从0到1)https://blog.csdn.net/qq_36187544/article/details/89548363 下一篇: 目录 HED网络 opencv 源代码 百度云资源: 链接&…

机器学习笔记 基于深度学习的边缘检测

一、Holistically-Nested Edge Detection 边缘检测是视觉工作中十分常用的技术,传统边缘检测已经包含了很多经典的诸如Canny、Robert等等,都是各有擅场,不过有一点问题,就是很多参数需要人工调试,所以深度学习研究人员提出了基于卷积神经网络的边缘检测算法。 即HED,该算…

C#处理Gauss光斑图像[通过OpenGL和MathNet]

C# 处理高斯光束的光斑图像 1 基础操作2 图片截取3 转灰度图4 SharpGL画三维点云图5 MathNet拟合,OxyPlot作图 1 基础操作 .Net平台必备VS,新建WinForm项目,项目名称Gauss,位置任选。然后就会进入窗口编辑页面,我们开…

(pytorch进阶之路)IDDPM之diffusion实现

文章目录 概述代码实现image_trian.pydef create_model_and_diffusion()def create_gaussian_diffusion()SpacedDiffusion类GaussianDiffusion类 ⭐ LOOK HERE ⭐ 边角料noise scheduling 概述 DM beat GANs作者改进了DDPM模型,提出了三个改进点,目的是…

【论文笔记】A Unified MRC Framework for Named Entity Recognition

香农科技 ACL 2020的论文笔记 代码和paper可见:https://github.com/ShannonAI/mrc-for-flat-nested-ner 文章提出了将ner看做MRC(machine reading comprehen- sion )任务,而不是当做序列标注看待。 文章认为。在序列标注的过程中,如ORG是被当…

在OpenCV中基于深度学习的边缘检测

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达本文转自:AI算法与图像处理 导读 分析了Canny的优劣,并给出了OpenCV使用深度学习做边缘检测的流程,文末有代码链接。 在这篇文章中&am…

真实的产品案例:实现文档边缘检测

向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程 公众号:datayx 什么是边缘检测? 边缘检测是计算机视觉中一个非常古老的问题,它涉及到检测图像中的边缘来确定目标的边界,从而分离感…

ConvLSTM官方示例

运行ConvLSTM官方例子记录(包含逐行解释): """ This script demonstrates the use of a convolutional LSTM network. This network is used to predict the next frame of an artificially generated movie which contains …

一个卷积神经网络的python实现

这几天用numpy实现了卷积神经网络,并在mnist数据集上进行了0-5五个数字的训练,全连接层的前向和反向写的肯定是对的,但卷积层不能确定,可能是对的.以后发现有错再改,卷积层在cpu上训练速度很慢,还有把代码里的Flatten换成GlobalAveragePooling以后试过一次好像错了,以后有机会再…

斯坦福NLP名课带学详解 | CS224n 第16讲 - 指代消解问题与神经网络方法(NLP通关指南·完结)

作者:韩信子ShowMeAI,路遥ShowMeAI,奇异果ShowMeAI教程地址:https://www.showmeai.tech/tutorials/36本文地址:https://www.showmeai.tech/article-detail/253声明:版权所有,转载请联系平台与作…

tpl文件如何导入ps?tpl文件笔刷怎么安装?

tpl文件如何导入ps?tpl文件笔刷怎么安装?有些笔刷格式是TPL的,这类笔刷导入方法其实非常简单,轻松几个操作即可,下面小编为大家详细介绍如何载入TPL格式笔刷。 1、准备好 .tpl 文件,然后打开PS。 2、在PS顶…

vscode中将tpl文件高亮显示

打开vscode: file --> preferences --> settings 进入settings页面 打开后输入 "files.associations": {"*.tpl": "html"}保存就可以咯

VSCode 中支持 tpl 等文件高亮渲染方法

这里以 .tpl 结尾的文件为例,其他后缀皆是如此, 点击菜单 文件->首选项->设置 输入如下代码: "files.associations": {"*.tpl": "html" }

vscode解决不识别tpl后缀文件的解决方法

vscode解决不识别tpl后缀文件的解决方法 了解tpl文件 解释: 以前用过的前端页面都是.html格式的,现在出现了.tpl文件,是template的缩写,其实就是前端页面,写的也是html。 应该是前端模板Smarty的一个格式。可以在D…

.tpl 文件高亮配置

文件-》首选项-》设置 "files.associations": {​ "*.tpl": "html"}

webpack自定义loader--编译.tpl文件

一、初始化一个项目 1、npm 初始化 npm init -y2、安装需要的依赖 package.json文件:{"name": "webpack-plugin-test","version": "1.0.0","description": "","main": "main.js&quo…

EditPlus打开.tpl文件高亮显示代码

Tools——Preferences File——Settings&syntax 在HTML下增加;tpl

opencart html模板引擎,Opencart前台HTML、tpl文件的修改,附opencart文件目录

△问题和服务可以联系微信:yangtuo1991 △文章浏览次数: 20,008 很多时候有些同学有需要修改opencart前台的一小部分样式和文字,修改版权信息、顶部和底部文字等一系列的需求、这里介绍下前台的这些 tpl文件的位置和修改, 这些模板的主题文件都会在catalog/view/theme/ 下面…