首先要弄明白分类和聚类的区别:

分类(判别):数据包含数据特征部分和样本标签部分,分类的目的就是判别新的数据特征到其应有的样本标签(类别)中。

比方说,现在告诉大家一个教室里面其中一半人每个人的性别(男女),现在需要大家将另一半人中每个人的性别判断出来,因此大家首先要做的的找到区分性别的特征,然后应用到另一半人身上,将其归类。

聚类:数据中只有数据特征,需要根据某一标准将其划分到不同的类中。

同样的,现在一个教室里面所有人都没什么标签,现在需要你将整个教室的人分为两类,那么你可以从性别、体型、兴趣爱好、位置等等角度去分析。

可以看到,分类其实跟预测差不多,只不过输出是一维的,并且还是整数,所以可以用预测中的机器学习方法来解决分类问题。而聚类则不同,一般来说,聚类需要定义一种相似度或者距离,从而将相似或者距离近的样本归为一类,常见的有:kmeans算法、分层聚类、谱聚类等。

对于聚类来说,除了相似性的度量之外,还有一个比较重要的是终止条件,即需要聚成多少类,一般来说,基本都是在聚类之前就设定好需要聚成多少类,其中kmeans就是先设定几个类中心,然后将与类中心相近的数据归到那一类,然后不断更新类中心,直至所有数据聚类完毕,而分层聚类则是相反,先将所有数据各自为一类,然后将相似的类合并,直至达到k类为止...
      当然,也可以将终止条件改为当最小的距离大于某一阈值时,不再合并类(适用于分层聚类),除了这些算法,还有机器学习方法,如:自组织竞争网络(SOM),可以自行了解。

接下来我们以分层聚类为例进行讲解,这一部分例子来自于《数学建模算法与应用》,用以辅助说明。通常来说,分层聚类有两类,一类是从上到下的分裂(即现将所有个体看做一个类,然后利用规则一步步的分裂成多个类),另一类是从下到上的合并(即先将每个个体看作一个类,然后依据规则一步步合并为一个类)。因此分层聚类最终可以得到一个金字塔结构,每一层都有不同的类别数量,我们可以选取需要的类别数量。

例子:设有5个销售员w1,w2,w3,w4,w5,他们的销售业绩由二维变量(v1,v2)描述:

将5个人的两种数据看作他们的指标,首先,我们简单定义任意两组数据的距离为:

与此相对应的,当有样本归为一类后,我们要计算类间距离就又得需要一个计算方式,我们定义任意两类间的距离为两类中每组数据距离的最小值:

因此,可以得到任意两个销售员的数据距离矩阵:

Step1 首先,最相近的两组样本是w1和w2,他们的距离为1,所以先将其聚为一类;

Step2 然后,剩下的样本为{w1,w2},w3,w4,w5,我们发现除了距离1之外,最相似的是       w3,w4,他们的距离为2,所以将其聚为一类;
Step3 然后,剩下的样本为{w1,w2},{w3,w4},w5,我们发现除了距离1,2之外,最相似的   是{w1,w2}和{w3,w4},他们的距离以 w2和w3的距离为准,距离为3,所以将这两类聚为一类; 
Step4 最后,剩下的样本为{w1,w2,w3,w4},w5,只剩最后两类了,所以最后一类为   {w1,w2,w3,w4,w5},类间距以w3/w4与w5的距离4为准。

代码如下:

%% 编程实现
clc;clear;close all
data = [1,0;1,1;3,2;4,3;2,5];%原始数据
[m, ~] = size(data);
d = mandist(data');%求任意两组数据的距离
d = tril(d);%取下三角区域数据
nd = nonzeros(d);%去除0元素
nd = unique(nd);%去除重复元素
 for i = 1 : m-1
     nd_min = min(nd);
     [row, col] = find(d == nd_min);
     label = union(row,col);%提取相似的类别
     label = reshape(label, 1, length(label));%将类别标签转化成行向量
     disp(['第',num2str(i),'次找到的相似样本为:',num2str(label)]);
     nd(nd == nd_min) = [];%删除已归类的距离
     if isempty(nd)%如果没有可分的类就停止
         break
     end
 end
%% 工具箱实现
clc;clear;close all
data = [1,0;1,1;3,2;4,3;2,5];%原始数据
y = pdist(data,'cityblock');%计算任意两样本的绝对值距离
yc = squareform(y);%将距离转化成对称方阵
z = linkage(y);%生成聚类树
[h, t] = dendrogram(z);%画出聚类树
n = 3;%最终需要聚成多少类
T = cluster(z, 'maxclust', n);%分析当分n类时,个样本的标签
for i = 1 : n
    label = find(T == i);
    label = reshape(label, 1, length(label));
    disp(['第',num2str(i),'类有:',num2str(label)]);
end

结果如下:

数学建模————统计问题之分类/聚类(二)相关推荐

  1. 数据挖掘机器学习[七]---2021研究生数学建模B题空气质量预报二次建模求解过程:基于Stacking机器学习混合模型的空气质量预测{含码源+pdf文章}

    相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据挖掘机器学习---汽车交易价格预测详细版本[二]{EDA-数据探索性分析} 数据挖掘机器学习 ...

  2. 2021年数学建模国赛C题问题二详细思路和代码

    2021年数学建模国赛C题问题一详细思路和代码 说明: 本思路仅为小编个人思路,其中关于本文中给出的AdaBoost回归预测模型于今年的 国赛参考评分标准有所出入,所以本题思路为个人创新思路,不一定符 ...

  3. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  4. 清风数学建模学习笔记——系统(层次)聚类原理详解及案例分析

    系统聚类   系统聚类的合并算法通过计算两类数据点间的距离,对最为接近的两类数据点进行组合,并反复迭代这一过程,直到将所有数据点合成一类,并生成聚类谱系图.此外,系统聚类可以解决簇数 K 的取值问题, ...

  5. matlab中离开网格的流量,数学建模【数据处理方法(一维、二维插值方法;数据拟合方法;插值and拟合的MATLAB实现)】...

    [学习网址:MOOC---郑州轻工业大学---数学建模与实验]数学建模专栏 笔记01[第1.2章][概述.软件介绍] 笔记02[第3章][数据处理方法] 笔记03[第4章][规划模型] 笔记04[第5 ...

  6. 数学建模_数学模型的分类数学建模十大算法

    数学模型的分类 数学建模十大算法 1.蒙特卡罗算法 (该算法又称随机性模拟算法, 是通过计算机仿真来解决问题的算法, 同时可以 通过模拟可以来检验自己模型的正确性,比较好用的算法) 2.数据拟合.参数 ...

  7. 数学建模——统计回归模型

    前言:看完数学建模的统计回归模型,更是感到了数学建模的"细腻"之处,对比与机器学习,如果说机器学习像是"打一场仗",那数学建模更是像"做一场手术&qu ...

  8. 数学建模 ————统计问题之预测(一)

    该资料是笔者根据自身理解一点点写出来的,希望各位能尊重这一份来之不易的劳动成果.因个人水平有限,资料中难免会出现不足与错误,欢迎各位的批评指正.(笔者曾获得2015年全国大学生数学建模国家一等奖,20 ...

  9. 2021华为杯数学建模B题“空气质量预报二次建模” 预处理思路+Python代码

    简介 前阵子和小伙伴做了2021年华为杯研赛的B题"空气质量预报二次建模",发现数据预处理一块挺有意思的,涵盖了常规的缺失值(随机缺失.指标缺失/列缺失.条目缺失/行缺失).异常值 ...

最新文章

  1. PostgreSQL连接池pgbouncer的使用
  2. android 布局 站位符,基于android布局中的常用占位符介绍
  3. 另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题
  4. 隐函数画图with R
  5. oracle中的char和j,oracle中char与varchar2的区别
  6. lca---tarjan算法
  7. QT的QWizard类的使用
  8. Lyapunov and Stability Theory
  9. java定时器的使用(Timer)
  10. 开发高级 Web 部件
  11. 中国电信叫停不限量套餐 套外资费3元/GB
  12. Contacts Provider基础
  13. java竖线分割_用竖线字符(“ |”)分割字符串
  14. 北塔曾经很张狂 如今沉默为哪桩
  15. cypher第一章背景与攻略
  16. linux 动画软件,免费开源的 2D 动画软件
  17. Java集合详解--什么是Map
  18. 给DataTable中添加一行数据
  19. LeetCode题解(0417):太平洋大西洋水流问题(Python)
  20. Grin v0.5在Ubuntu下的安装和启动

热门文章

  1. 打开目录报错:Stale file handle
  2. maya贴图丢失重链插件tjh_lost_textures_finder1.3.1更新下载
  3. 快递单打印工具 绿色
  4. Jenkins实践基础:使用Easypack搭建一主多从的分布式持续集成环境
  5. C语言:scandir函数详解
  6. 蓝本蓝科技:做好社群活动的8个环节,有效提升社群活跃度​
  7. 判断三个数是否构成三角形并判断三角形类型
  8. HTML学生个人网站作业设计:动漫网站设计——海贼王中乔巴专题漫画(5页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  9. 揭秘Windows10 UWP中的httpclient接口[2]
  10. 提高办公效率必学的键盘操作技巧