【数学建模】--聚类模型

聚类模型的定义:

“物以类聚,人以群分”,所谓的聚类,就是将样本划分为由类似的对象组成的多个类的过程。聚类后,我们可以更加准确的在每个类中单独使用统计模型进行估计,分析或预测;也可以探究不同类之间的相关性和主要差异。

聚类和分类的区别:分类是已知类别的,聚类未知。

 K-means聚类算法

流程:

  1. 指定划分的簇的k值(类的个数)
  2. 随机选择k个数据作为哦初始聚类中心(不一定是样本点)
  3. 将其余数据划分到距离较近的聚类中心
  4. 调整新类,将中心更新为已划分数据的中心
  5. 重复3,4步检查中心是否收敛(不变),如果收敛或达到迭代次数使停止循环。(一般循迭代次数设置为10次)
  6. 结束。

 

图形结合理解:

 

我们可以登录网站自行体验:Visualizing K-Means Clustering

如果使自己添加类的位置可以选择I‘ll Choose

 

选择自己喜欢的图形:

 

选择图形后添加类的位置然后一直点GO/Update Centroids直至不想不再发生变化。

 

算法流程图:

 

K_means算法的评价:

优点:快,高效率

缺点:需要给出k;对聚类中心敏感,聚类中心的位置不同结果不同;对孤立点敏感,孤立点对中心和其余样本带点的更新影响较大。

 

K-means算法—Spss操作:

 

聚类数根据自己想要分类的层次决定。

这里我们分为了高消费,中消费,低消费三类

 

得出结果

 

K-means算法的讨论:

需要自己给定k,当变量量纲不同的时候需要去量纲化。

Spss中去量纲化操作:

分析->描述统计->描述->导入需要去量纲化变量->√将标准化值另存为变量。

 

 

得到去量纲话Z-name

 

因为本次的例子变量单位相同不需要去量纲化,为了方便就拿此例子的数据去量纲化得到的结果有些轻微差

 

系统(层次)模型

简介:

 

过程及原理简介:

 

 

样品与样品之间的常用距离:

 

指标与指标之间的常用距离:

 

类与类之间的常用距离以及计算方法:

 

 

 

 

 

 

案例:

 

 

得到聚类的谱系图:

 

我们想要将数据分成几类通过对谱系图作垂线可得到明显的类组如在G9后面的线作垂线得到G1,2,4,5,6,7,8为一组,G3为一组一共两组。

 

 

注意问题:

 

系统聚类在SPSS中的操作:

分析-分类-系统聚类-导入数据-图-√谱系图

由冰柱图聚类谱系图等。

 

如何确定类的个数:利用Excel中的折线图,在折线趋缓的时候找对应的横坐标即是合适的分类个数。

操作:

1.复制stata中得到的系数-excel-排序-降序

2.插入-推荐的图标-散点图-调整合适的x轴坐标范围

3.观察下降趋势趋缓的地方对应的x可作为分类的个数。

STATA                       EXCEL                                                    

 

            

 

 

确定K后保存聚类结果并画图

  1. 通过excel的三点分析确定k

分析-分类-系统聚类-保存-单个解-聚类数

  1. 作图:

图形-图标构建-散点图/点图-2个指标(第二个)上拖,3个指标(第四个)上拖-输入x轴,y轴-设置颜色(聚类)-组-点id标签(将省份拖入)-修改图的背景,散点等颜色(双击编辑)

 

图二是三维的

 

 

编辑界面:

 

DBSCAN算法

基本概念:

可以理解为流感,按一定的半径不断蔓延传播。

DBSCAN的优缺点:

 

指标只有很少比如只有两个的时候较为合适,DSCAN的制图对半径,和圆内所能容纳最大聚类个数非常敏感,稍微修改就有很大的显著差异。

 

DBSACN的制图网站:Visualizing DBSCAN Clustering (naftaliharris.com)

演示:

半径为1.2,最少容纳点为4:

 

半径为0.8,最少容纳点为4:

 

DBSACN的伪代码:

 

Matlab中的DBSACN代码:

IDX中的数据就是每个数据的分类,为0则是孤立点。

旁边则是DBSACN用matlab画出的图形。

 

Matlab代码:

主函数:

clc;
clear;
close all;%% Load Dataload mydata;%这里的数据跟随自己需要聚类的数据可以改变,后面的X是博主调试时使用的数据名可以自己改变。%% Run DBSCAN Clustering Algorithmepsilon=0.5;
MinPts=10;
IDX=DBSCAN(X,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:nif ~visited(i)visited(i)=true;Neighbors=RegionQuery(i);if numel(Neighbors)<MinPts% X(i,:) is NOISEisnoise(i)=true;elseC=C+1;ExpandCluster(i,Neighbors,C);endendendfunction ExpandCluster(i,Neighbors,C)IDX(i)=C;k = 1;while truej = Neighbors(k);if ~visited(j)visited(j)=true;Neighbors2=RegionQuery(j);if numel(Neighbors2)>=MinPtsNeighbors=[Neighbors Neighbors2];   %#okendendif IDX(j)==0IDX(j)=C;endk = k + 1;if k > numel(Neighbors)break;endendendfunction Neighbors=RegionQuery(i)Neighbors=find(D(i,:)<=epsilon);endend

 DBSCAN制图函数:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/62520.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI抠图使用指南:Stable Diffusion WebUI Rembg实用技巧

抠图是图像处理工具的一项必备能力&#xff0c;可以用在重绘、重组、更换背景等场景。最近我一直在探索 Stable Diffusion WebUI 的各项能力&#xff0c;那么 SD WebUI 的抠图能力表现如何呢&#xff1f;这篇文章就给大家分享一下。 安装插件 作为一个生成式AI&#xff0c;SD…

centos7 安装 docker 不能看菜鸟教程的 docker 安装,有坑

特别注意 不能看菜鸟教程的 docker 安装&#xff0c;有坑 如果机器不能直接上网&#xff0c;先配置 yum 代理 proxyhttp://172.16.0.11:8443 配置文件修改后即刻生效&#xff0c;再执行 yum install 等命令&#xff0c;就可以正常安装软件了。 参考 https://blog.csdn.net/c…

从零实战SLAM-第二课(SLAM中的基础数学)

空间数据的表达方式&#xff1a;点和向量两种形式。 向量的内积&#xff0c;也叫做点乘&#xff0c;是逐点相乘后累加&#xff0c;最终结果是一个标量&#xff0c;物理意义是一个向量在另一个向量上的投影。 外积&#xff0c;也叫做叉乘&#xff0c;两个向量拼起来成&#xff0…

逆向破解学习-登山赛车

试玩 课程中的内容 Hook代码 import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage;public class HookComYoDo1SkiSafari2TXYYB_01 extends HookImpl{Overridepublic String p…

JSON.stringify循环引用问题

前端使用到对象的深度复制通常会简单的使用JSON.parse(JSON.stringify(obj))实现 &#xff08;浅表复制会用Array.from、Object.assign、Object.create静态方法实现&#xff09;&#xff0c;但在对象存在循环引用的情况下&#xff08;比如&#xff1a;树结构中子对象存在parent…

Linux进程管理命令

一、进程 程序由一条条指令构成&#xff0c;在运行一个程序的时候就是把这些指令从第一条执行到最后一条&#xff0c;而进程是一个正在运行的程序。 比如说&#xff0c;一个main.c文件是不可以直接运行的&#xff0c;对main.c进行编译链接之后生成一个main.exe&#xff08;在W…

CEC2013(MATLAB):遗传算法(Genetic Algorithm,GA)求解CEC2013的28个函数

一、遗传算法GA 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索优化方法&#xff0c;它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象&#xff0c;从任…

网络原理(JavaEE初阶系列11)

目录 前言&#xff1a; 1.网络原理的理解 2.应用层 2.1自定义协议的约定 2.1.1确定要传输的信息 2.1.2确定数据的格式 3.传输层 3.1UDP 3.1.1UDP报文格式 3.2TCP 3.2.1确认应答 3.2.2超时重传 3.2.3连接管理 3.2.3.1三次握手 3.2.3.2四次挥手 3.2.4滑动窗口 3.…

2000-2021年地级市碳排放数据/地级市二氧化碳排放

2000-2021年地级市碳排放数据/地级市二氧化碳排放 1、时间&#xff1a;2000-2021年 2、来源&#xff1a;主要是各级统计年鉴、相关统计资料等。其中&#xff0c;能源部分分能源品种分部门的能 源消费数据来源于《中国能源统计年鉴》以及各级统计年鉴&#xff1b;工业过程和产…

《Zookeeper》源码分析(七)之 NIOServerCnxn的工作原理

目录 NIOServerCnxnreadPayload()handleWrite(k)process() NIOServerCnxn 在上一节IOWorkRequest的doWork()方法中提到会将IO就绪的key通过handleIO()方法提交给NIOServerCnxn处理&#xff0c;一个NIOServerCnxn代表客户端与服务端的一个连接&#xff0c;它用于处理两者之间的…

leetcode 面试题 02.07. 链表相交

题目&#xff1a;leetcode 面试题 02.07. 链表相交 描述&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 思路&…

【ChatGPT 指令大全】怎么使用ChatGPT来帮我们写作

在数字化时代&#xff0c;人工智能为我们的生活带来了无数便利和创新。在写作领域&#xff0c;ChatGPT作为一种智能助手&#xff0c;为我们提供了强大的帮助。不论是作文、文章&#xff0c;还是日常函电&#xff0c;ChatGPT都能成为我们的得力助手&#xff0c;快速提供准确的文…