数学建模————统计问题之分类/聚类(二) 3 X- Y8 T$ l; H1 m. T R 首先要弄明白分类和聚类的区别:: q! b/ _. `3 `# p) Y
分类(判别):数据包含数据特征部分和样本标签部分,分类的目的就是判别新的数据特征到其应有的样本标签(类别)中。5 B, Z: T: J3 ]9 \8 G2 q
' e, l. z( Y( N0 o! k* N2 v 比方说,现在告诉大家一个教室里面其中一半人每个人的性别(男女),现在需要大家将另一半人中每个人的性别判断出来,因此大家首先要做的的找到区分性别的特征,然后应用到另一半人身上,将其归类。1 @7 |- |2 ^; I, l& G: Y
7 Q, ] u& V h, k/ K 聚类:数据中只有数据特征,需要根据某一标准将其划分到不同的类中。+ t g) X- `" S9 F2 x+ ?
* | f" |) w% Q: v 同样的,现在一个教室里面所有人都没什么标签,现在需要你将整个教室的人分为两类,那么你可以从性别、体型、兴趣爱好、位置等等角度去分析。 0 k2 l# q9 X' X1 V, [( u, U: a* e7 @7 N b( c% E
* \# P0 @# O0 \8 M) N' j
8 _7 m4 q0 s, g3 r3 U1 U/ |
可以看到,分类其实跟预测差不多,只不过输出是一维的,并且还是整数,所以可以用预测中的机器学习方法来解决分类问题。而聚类则不同,一般来说,聚类需要定义一种相似度或者距离,从而将相似或者距离近的样本归为一类,常见的有:kmeans算法、分层聚类、谱聚类等。* s* d: x/ a; r4 C
4 Q, j' P7 `* S3 k 对于聚类来说,除了相似性的度量之外,还有一个比较重要的是终止条件,即需要聚成多少类,一般来说,基本都是在聚类之前就设定好需要聚成多少类,其中kmeans就是先设定几个类中心,然后将与类中心相近的数据归到那一类,然后不断更新类中心,直至所有数据聚类完毕,而分层聚类则是相反,先将所有数据各自为一类,然后将相似的类合并,直至达到k类为止...8 i- M; n- b, s3 W. ?
当然,也可以将终止条件改为当最小的距离大于某一阈值时,不再合并类(适用于分层聚类),除了这些算法,还有机器学习方法,如:自组织竞争网络(SOM),可以自行了解。$ Q1 h; Q0 M2 T
" v, B' u: G2 K/ f% Z( | 接下来我们以分层聚类为例进行讲解,这一部分例子来自于《数学建模算法与应用》,用以辅助说明。通常来说,分层聚类有两类,一类是从上到下的分裂(即现将所有个体看做一个类,然后利用规则一步步的分裂成多个类),另一类是从下到上的合并(即先将每个个体看作一个类,然后依据规则一步步合并为一个类)。因此分层聚类最终可以得到一个金字塔结构,每一层都有不同的类别数量,我们可以选取需要的类别数量。 4 W" P) r3 Y5 G x' D+ j* \4 U+ |--------------------- ( S9 i. e% r. \/ r/ O- A8 _7 k% q6 v 例子:设有5个销售员w1,w2,w3,w4,w5,他们的销售业绩由二维变量(v1,v2)描述: ) O. f% @% m. k5 B6 J# d" @9 |$ C0 O
& d' z& i4 y4 Y9 A. d& C 2 P; `4 T( L' s2 y 将5个人的两种数据看作他们的指标,首先,我们简单定义任意两组数据的距离为: 8 B- f' h7 d3 W. r9 ?2 J* F8 D, X m( S$ T6 p9 W Q( s$ ]
, c0 k R* Z3 o
7 z# U4 Z8 J, H
& p4 ~. S. E: g/ }' l$ U9 M
0 F- S% |4 a/ Z; E B9 O8 U! X% D: Q* V- e4 m
{7 }) t; k. n, }8 j
与此相对应的,当有样本归为一类后,我们要计算类间距离就又得需要一个计算方式,我们定义任意两类间的距离为两类中每组数据距离的最小值:6 `- k- m1 d+ E: z' N" V
' ?: ?2 M N0 I, F7 V& x) `. A% o0 a
8 N& z! l% f7 ]+ |( M+ x& b) O+ k8 X7 Q9 Z3 {" m
2 s: l* t/ D& `# \. h
! B6 ?. u) }8 \2 `* M; k$ Q+ q5 o' o: x0 w) A
4 R2 ]" a7 v% {& i2 s1 G 因此,可以得到任意两个销售员的数据距离矩阵:: I* @" W _* J- s0 |1 C
9 Q* W3 t& V3 j1 O