QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2036|回复: 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
    数学建模————统计问题之分类/聚类(二)" W8 H( u% G9 T+ M$ a
      首先要弄明白分类和聚类的区别:9 ?; u6 i5 B: F- f
         分类(判别):数据包含数据特征部分和样本标签部分,分类的目的就是判别新的数据特征到其应有的样本标签(类别)中。
    - p# N. P; ], @& J3 Q2 A" T# a4 |. Q3 \9 C" {+ O8 K
          比方说,现在告诉大家一个教室里面其中一半人每个人的性别(男女),现在需要大家将另一半人中每个人的性别判断出来,因此大家首先要做的的找到区分性别的特征,然后应用到另一半人身上,将其归类。7 y2 N* o2 y/ }& Y7 y- k) O
    # x* Q4 Y) T) D  q+ M7 P
         聚类:数据中只有数据特征,需要根据某一标准将其划分到不同的类中。' R8 Y+ \( H; f+ k% k

    + N% `. U/ x8 `; t2 P& @     同样的,现在一个教室里面所有人都没什么标签,现在需要你将整个教室的人分为两类,那么你可以从性别、体型、兴趣爱好、位置等等角度去分析。/ y  `4 n0 ^5 [
    8 `' b$ w1 `  A' R6 M, _
    4 m" q  \* J6 A% m

    * {/ i3 s! k/ j- o& Q$ i     可以看到,分类其实跟预测差不多,只不过输出是一维的,并且还是整数,所以可以用预测中的机器学习方法来解决分类问题。而聚类则不同,一般来说,聚类需要定义一种相似度或者距离,从而将相似或者距离近的样本归为一类,常见的有:kmeans算法、分层聚类、谱聚类等。$ C, x4 E9 y1 u6 T$ j& s

    ' P+ A9 [' Z3 G  o* u2 D- Y+ C     对于聚类来说,除了相似性的度量之外,还有一个比较重要的是终止条件,即需要聚成多少类,一般来说,基本都是在聚类之前就设定好需要聚成多少类,其中kmeans就是先设定几个类中心,然后将与类中心相近的数据归到那一类,然后不断更新类中心,直至所有数据聚类完毕,而分层聚类则是相反,先将所有数据各自为一类,然后将相似的类合并,直至达到k类为止...
    1 u4 d9 _4 {0 Z$ z0 z8 j      当然,也可以将终止条件改为当最小的距离大于某一阈值时,不再合并类(适用于分层聚类),除了这些算法,还有机器学习方法,如:自组织竞争网络(SOM),可以自行了解。
    % n9 _- l- t' e; C! |1 Y
    9 ^  R0 ^$ B  I+ @# b       接下来我们以分层聚类为例进行讲解,这一部分例子来自于《数学建模算法与应用》,用以辅助说明。通常来说,分层聚类有两类,一类是从上到下的分裂(即现将所有个体看做一个类,然后利用规则一步步的分裂成多个类),另一类是从下到上的合并(即先将每个个体看作一个类,然后依据规则一步步合并为一个类)。因此分层聚类最终可以得到一个金字塔结构,每一层都有不同的类别数量,我们可以选取需要的类别数量。& x: d. r: F5 G+ ~$ C, Z; `  h% r
    --------------------- / e' I5 |7 c1 ^. ]
         例子:设有5个销售员w1,w2,w3,w4,w5,他们的销售业绩由二维变量(v1,v2)描述:) P2 F6 m8 |, x% o1 R' ^

    * z) |3 ~  \2 L; Q* V9 [  K( F
    ' Y1 ~: B" t4 P* @7 X" D7 N( a
    2 |* s% ^- s( M1 X( [5 q     将5个人的两种数据看作他们的指标,首先,我们简单定义任意两组数据的距离为:; T) O9 O  K9 I) X4 E3 M- V. V

    2 ?% F7 n4 @% K! w* F  f  o6 g6 S9 A/ n+ n! ?9 o

    - k( Y- }8 U. N
    : h+ Y! y" Y" ^& |$ w1 N" b# d+ a  R) A8 ?8 G
    : D% A* q: Z% Q  A$ n6 G

    3 n3 W+ h" O5 N3 I/ G' y; @; w8 g     与此相对应的,当有样本归为一类后,我们要计算类间距离就又得需要一个计算方式,我们定义任意两类间的距离为两类中每组数据距离的最小值:3 p- K1 v, R# Y* ]" ~5 D, k

    . h* g, E7 t; F$ e/ B5 V
    7 s8 n% g6 W  `+ |- U: Z/ m9 u1 W* }; d% I( E" W" a+ y. @- w
    8 c$ V: u* ~  E) _& M. ?1 o
    ' T& C! g5 S+ R$ R7 o
    0 |* d& c8 y) l: q6 H' |2 p
    & g( Z' h! f  L: k2 o0 z* m/ D
         因此,可以得到任意两个销售员的数据距离矩阵:' n1 A) V1 @' q" `; n
    ' h6 s1 X7 A/ Z# {' ^: h' e' {0 G& A
    ; X% C3 z3 r6 j+ J  C
    & ?! g, C  D" |1 Y# [4 _2 _  i
    Step1 首先,最相近的两组样本是w1和w2,他们的距离为1,所以先将其聚为一类;  b1 s; Y& E" H/ t% B5 w

    . X' B4 A" b) u: U. RStep2 然后,剩下的样本为{w1,w2},w3,w4,w5,我们发现除了距离1之外,最相似的是       w3,w4,他们的距离为2,所以将其聚为一类;% ~6 x5 i$ ?; U3 ~
    Step3 然后,剩下的样本为{w1,w2},{w3,w4},w5,我们发现除了距离1,2之外,最相似的   是{w1,w2}和{w3,w4},他们的距离以 w2和w3的距离为准,距离为3,所以将这两类聚为一类;
    - b" P3 Q( H4 Q' BStep4 最后,剩下的样本为{w1,w2,w3,w4},w5,只剩最后两类了,所以最后一类为   {w1,w2,w3,w4,w5},类间距以w3/w4与w5的距离4为准。
    . Y3 G) p. W/ V% r8 ?: z; f" T2 v* Q0 [) B( [
       代码如下:%% 编程实现clc;clear;close all$ s0 X+ a  P& P( G
    data = [1,0;1,1;3,2;4,3;2,5];%原始数据
    + N, j; }; d% |[m, ~] = size(data);' Q, ]) B9 S5 \9 [' l# T
    d = mandist(data');%求任意两组数据的距离9 R$ n0 b- P$ t% @4 R3 M3 l
    d = tril(d);%取下三角区域数据
    ) _1 R6 G% J( Q0 U; Rnd = nonzeros(d);%去除0元素" S" A" P9 Q, W- {  \
    nd = unique(nd);%去除重复元素
    1 x- N1 c+ n( h& _2 P+ q$ l8 D for i = 1 : m-1
    ; Q  X' |! o. Y2 f     nd_min = min(nd);5 W2 P0 m+ S) m7 ^, s/ M
         [row, col] = find(d == nd_min);
    % k. c% F" ?7 m8 t4 E( V     label = union(row,col);%提取相似的类别
    0 I$ g8 }' U0 b* @2 `     label = reshape(label, 1, length(label));%将类别标签转化成行向量! z7 a1 P; H/ N" B# i" f
         disp(['第',num2str(i),'次找到的相似样本为:',num2str(label)]);6 Z1 X! j  x) X  x* I
         nd(nd == nd_min) = [];%删除已归类的距离
    , b; f9 V. J, i, t2 Z; n6 w  H# y     if isempty(nd)%如果没有可分的类就停止- w/ F- ~, W8 _2 L) i% I% @8 z4 A  C
             break2 M* s$ ]5 ?, z% c. \
         end: R1 n4 p" V8 @9 c0 \: X$ {! f+ w* e: h
    end
    4 K* ^  z" g3 w  l/ {; r7 ^+ K" q! u8 A  ^- Q%% 工具箱实现5 u  ]" T, j9 s3 e
    clc;clear;close all# Q, N* I3 M0 M& b8 x/ J
    data = [1,0;1,1;3,2;4,3;2,5];%原始数据( D7 f$ b9 B* a( B
    y = pdist(data,'cityblock');%计算任意两样本的绝对值距离
    + [' v0 W+ H$ |5 d! b  X7 wyc = squareform(y);%将距离转化成对称方阵  x7 u& H$ M2 B! G
    z = linkage(y);%生成聚类树3 a/ x4 Q  _5 X% I7 \' P
    [h, t] = dendrogram(z);%画出聚类树/ L4 m7 @8 {% B5 c* t! O- K
    n = 3;%最终需要聚成多少类; ], G: d1 |) @! B7 ?
    T = cluster(z, 'maxclust', n);%分析当分n类时,个样本的标签' s2 H; t! V3 [, ^7 w5 A1 P
    for i = 1 : n, h. @. M" X, [! [+ f/ s
        label = find(T == i);- G( z( c/ k" Y+ }
        label = reshape(label, 1, length(label));
    ; ], B' R$ {; v2 d3 G    disp(['第',num2str(i),'类有:',num2str(label)]);
    9 B, @+ g- P0 k5 }$ ?9 k  M7 Y& H8 Wend) u) p6 S! y( }, n7 w3 F% O
        结果如下:1 x, i- H- i& }- S& `

    : d) d1 L' M1 i$ r7 |--------------------- , K' @/ E! a( s9 ?; I

    # W6 h, z5 b" x
    6 U/ S' d/ r0 n9 `1 ~; z# D8 r
    % A8 W+ B4 p& c5 P& L2 r: ]) m0 ]/ S( J- r* J9 I/ v

    * _, T3 L6 k( v& L  `- P# M
    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-6-13 17:45 , Processed in 0.387284 second(s), 51 queries .

    回顶部