QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2009|回复: 0
打印 上一主题 下一主题

[建模教程] 数学建模————统计问题之分类/聚类(二)

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2019-4-1 16:04 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    数学建模————统计问题之分类/聚类(二)
    5 q: W6 o& |! H$ _# r& R: J  首先要弄明白分类和聚类的区别:
    . R5 D# ~# B) ~* }/ h! x     分类(判别):数据包含数据特征部分和样本标签部分,分类的目的就是判别新的数据特征到其应有的样本标签(类别)中。" G9 Y$ b. o  S! L! A7 S
    ' z% B: g/ M. B9 R; W9 `# {, _
          比方说,现在告诉大家一个教室里面其中一半人每个人的性别(男女),现在需要大家将另一半人中每个人的性别判断出来,因此大家首先要做的的找到区分性别的特征,然后应用到另一半人身上,将其归类。
    4 ?) z! j1 U' o3 S8 M, q2 a% I/ L. z- q5 O
         聚类:数据中只有数据特征,需要根据某一标准将其划分到不同的类中。9 @$ I2 \2 W  f; d( l
    ; D5 r& p# t  U( y1 L
         同样的,现在一个教室里面所有人都没什么标签,现在需要你将整个教室的人分为两类,那么你可以从性别、体型、兴趣爱好、位置等等角度去分析。3 P3 D1 f# ?" N5 t# g; O- u

    & r( }5 |. f4 M% K1 H8 v
    $ Z$ a! \9 S$ B6 p7 M$ z/ n0 I% G  I& }' }; ]  N) v) z2 B% |
         可以看到,分类其实跟预测差不多,只不过输出是一维的,并且还是整数,所以可以用预测中的机器学习方法来解决分类问题。而聚类则不同,一般来说,聚类需要定义一种相似度或者距离,从而将相似或者距离近的样本归为一类,常见的有:kmeans算法、分层聚类、谱聚类等。: g/ A7 R6 a. ?0 ^  ^: \. e
    9 [$ p# o% V/ b( n/ K& s
         对于聚类来说,除了相似性的度量之外,还有一个比较重要的是终止条件,即需要聚成多少类,一般来说,基本都是在聚类之前就设定好需要聚成多少类,其中kmeans就是先设定几个类中心,然后将与类中心相近的数据归到那一类,然后不断更新类中心,直至所有数据聚类完毕,而分层聚类则是相反,先将所有数据各自为一类,然后将相似的类合并,直至达到k类为止...7 S: F) q7 X1 n# B# N% A
          当然,也可以将终止条件改为当最小的距离大于某一阈值时,不再合并类(适用于分层聚类),除了这些算法,还有机器学习方法,如:自组织竞争网络(SOM),可以自行了解。
    0 _( g- d  h& g9 X6 }5 X6 _$ h. u
           接下来我们以分层聚类为例进行讲解,这一部分例子来自于《数学建模算法与应用》,用以辅助说明。通常来说,分层聚类有两类,一类是从上到下的分裂(即现将所有个体看做一个类,然后利用规则一步步的分裂成多个类),另一类是从下到上的合并(即先将每个个体看作一个类,然后依据规则一步步合并为一个类)。因此分层聚类最终可以得到一个金字塔结构,每一层都有不同的类别数量,我们可以选取需要的类别数量。
    - z8 O) m/ |) U8 {, Y& \7 j. N% D--------------------- 4 t, G  c$ m; @4 {. V3 {
         例子:设有5个销售员w1,w2,w3,w4,w5,他们的销售业绩由二维变量(v1,v2)描述:
    $ `- u* S1 [9 y% R- q- _+ b4 a3 u. P2 ^9 S5 G3 g% J
    # B$ I0 y1 L" C, O
    ' G: M# I" z* ^4 J" ^! p
         将5个人的两种数据看作他们的指标,首先,我们简单定义任意两组数据的距离为:" m/ K  Q$ B* `# r
    ! r5 ]0 v! D6 G9 t/ z' v- }2 S
    ) O7 X6 ]. l4 s4 j& R
    1 [; v, h1 f4 \9 |

    ; _+ f& j. x2 z! G! V
    ; {; j- F' P, n" [
    6 I2 {8 K) Y5 m- H3 A) v5 s* ]+ F. M( s+ A& b1 J0 X8 r4 }
         与此相对应的,当有样本归为一类后,我们要计算类间距离就又得需要一个计算方式,我们定义任意两类间的距离为两类中每组数据距离的最小值:; S& ?+ T. J  y2 L
    ! J8 m: R3 q0 k. h& e8 M7 J7 T

    8 z* {* P  S) l* s0 o
    + p' N1 w: A. L4 j2 |+ s% Y: z% Y0 h( d

    - t0 P: c0 M+ S: r
      l$ F$ t; U/ V2 N) Y% |! s& U" R0 E6 P, f
         因此,可以得到任意两个销售员的数据距离矩阵:% ^$ V  x# v  Z# K# V6 ^* F( i

    ) b6 Q$ T9 I9 Y. O0 v0 n1 J: G# |7 i" y7 Q; K- K" Y
    ; a5 p, [) _' k0 u  q7 j9 C7 J
    Step1 首先,最相近的两组样本是w1和w2,他们的距离为1,所以先将其聚为一类;5 _) W/ A: l9 F9 O9 ]# `& J9 u0 H- C
    . y/ B- k, p; i9 S$ d
    Step2 然后,剩下的样本为{w1,w2},w3,w4,w5,我们发现除了距离1之外,最相似的是       w3,w4,他们的距离为2,所以将其聚为一类;
    0 f0 m+ R5 q* J7 y6 i8 [Step3 然后,剩下的样本为{w1,w2},{w3,w4},w5,我们发现除了距离1,2之外,最相似的   是{w1,w2}和{w3,w4},他们的距离以 w2和w3的距离为准,距离为3,所以将这两类聚为一类; " p1 Y9 y9 x( R* {, c: X5 ?
    Step4 最后,剩下的样本为{w1,w2,w3,w4},w5,只剩最后两类了,所以最后一类为   {w1,w2,w3,w4,w5},类间距以w3/w4与w5的距离4为准。$ p9 f/ J$ d) L; n3 F
    1 ~2 r' t/ w4 K( [9 `$ r
       代码如下:%% 编程实现clc;clear;close all
    " Q% b) G! y9 _" Adata = [1,0;1,1;3,2;4,3;2,5];%原始数据% \! p" Q0 W1 _  e6 p
    [m, ~] = size(data);
    8 w; S' t# n" L& @d = mandist(data');%求任意两组数据的距离
    + J$ c% l" N1 t  Z* vd = tril(d);%取下三角区域数据
    6 ?2 O; X+ E2 {6 l+ b* Wnd = nonzeros(d);%去除0元素
    " D) ~$ D& |8 K& X  V2 X6 gnd = unique(nd);%去除重复元素
    3 Q# K+ v$ J* J3 K5 S, }$ g. X for i = 1 : m-1
    5 @7 r8 F* X# T) a5 _. @     nd_min = min(nd);+ }; A4 k5 f3 g: H, u; N
         [row, col] = find(d == nd_min);, h5 X, k* a2 m' d/ J* B  p
         label = union(row,col);%提取相似的类别
    # e  y/ y+ Q5 q: o1 U3 f' ~$ _     label = reshape(label, 1, length(label));%将类别标签转化成行向量
      d1 ?9 X  K# K7 _" L     disp(['第',num2str(i),'次找到的相似样本为:',num2str(label)]);) I2 v) _; ~# ~
         nd(nd == nd_min) = [];%删除已归类的距离
    0 D! A2 D6 L2 j     if isempty(nd)%如果没有可分的类就停止6 |8 d8 x+ e8 y9 f4 A& Q2 C3 B
             break3 a! X! ]) B, U  ^3 R
         end
    ' Y, Y; V) N- z; p3 L end& a& F2 R- Y. Y: G2 S
    %% 工具箱实现
    ' Q' W  |  w/ m( d# _clc;clear;close all! z' A+ v( z0 m1 \
    data = [1,0;1,1;3,2;4,3;2,5];%原始数据" f, F) L( L: r2 O! Y; ?( k
    y = pdist(data,'cityblock');%计算任意两样本的绝对值距离. U, ^7 e. |) f3 `2 u( T( u
    yc = squareform(y);%将距离转化成对称方阵
    * U: F) W/ L9 t5 P; p  F1 v5 xz = linkage(y);%生成聚类树7 R5 K* w8 m. O; b( k: l
    [h, t] = dendrogram(z);%画出聚类树
    2 Z0 o& \9 V' c. ^0 [; ?n = 3;%最终需要聚成多少类
    ; B( G; D- h8 v/ W* s4 oT = cluster(z, 'maxclust', n);%分析当分n类时,个样本的标签
    ; \7 M: F! p; J( J" Bfor i = 1 : n; G6 D+ W& l7 M! t. V7 G, P3 I9 a
        label = find(T == i);
    2 P8 C1 `; C9 O    label = reshape(label, 1, length(label));5 ^% ^: n) C0 M
        disp(['第',num2str(i),'类有:',num2str(label)]);
    / x3 U) o, b! H/ Y, rend  _) s+ m! }; e6 D( ?, w. U3 X  N
        结果如下:
    9 @7 Y/ I( R  t6 @9 O9 ]4 Z/ M" T) F9 ^0 ~
    --------------------- 4 B% g9 a2 L, }  f- z2 Z
    3 z! Q; w7 i" ~
    5 ]1 K4 f4 o4 s. f* h2 V& o8 K' I

    / K$ t& _! _! n! h1 S! l4 i( i3 |  Y2 e+ V
    " e6 f$ y( N8 E4 J* u. X
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-16 08:00 , Processed in 0.507339 second(s), 51 queries .

    回顶部