通俗Python机器学习(1)之KMeans聚类算法

[复制链接]
cck123 发表于 2017-12-31 06:18:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
聚类和分类的区别; G7 U& n- P% ?) ^' L7 R7 M! ^1 P
+ F5 x6 H- v* Z
机器学习中有两类的大问题,一个是分类,一个是聚类。  D# z2 x8 @, Y, G: ?0 `# V( @
分类
3 m) H# Z. h- e0 q) v监督学习,原始数据有标签,你根据原始数据建立模型,确定新来的数据属于哪一类。0 B: ~) d0 d. T: @4 S
聚类
  I# ^3 t4 ~; w8 i' H) D) U无监督学习,聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。# M8 v& x7 P5 u
KMeans聚类算法7 j8 p! L2 a# F0 H. Y8 c
/ E( J+ s) O" f4 X9 V6 u8 t8 E6 K4 |
KMeans算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:
& q! Z4 W7 S8 A* [$ j% O1.随机选择k个点作为初始的聚类中心;1 q. B; n# M/ M* w1 E2 K
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
" q3 ?% u' O" O# c) k* j1 H3.对每个簇,计算所有点的均值作为新的聚类中心% o% I& n7 E0 M$ C2 q
4.重复2、 3直到聚类中心不再发生改变
9 R1 X* n8 f: O( N% `: h! W3 {简单例子验证算法
9 R7 }) J) @6 o& @/ S* }/ Z+ j/ v% \- \- ~+ q; g7 M
我们假设有这样一些点:(0,0)、(1,1)、(2,1)、(8,9)、(10,9)、(11,10),画图如下:4 z4 P4 V0 `1 k  o
- w; o' N9 t; R4 \' A" }: u

5 ~. C- S, E1 [" p& n原始点分布
, _. N- r. G% H# _5 x5 i下面开始按照算法进行聚类。
( t& L! C( }6 x" `7 H, J4 K5 x9 [1 T' }. u9 N
1.初始聚类中心
) r. R: E5 }& D, L3 J. g+ Z我们设置聚类中心为2个,随机选取聚类中心,比如选(0,0)和(2,1)
/ f  f+ r# X- l& P+ }, s2.计算其他点到中心的距离
2 W# a. F1 ]2 d9 `+ N: H
! b* k0 Q; @4 J2 O8 k) g( N# H5 z8 l计算距离
; c; M# ?$ t# O( v+ s3.第一次聚类结果
  d5 n0 P, ]1 v$ O, k; P8 {依据点离哪个中心更近,可分为以下两类:
+ t; S" J) w' v  F1.Center1 (0,0)- O/ P' B3 V; M
2.Center2 (2,1)、(1,1)、(8,9)、(10,9)、(11,10)3 \: M9 g' ~, B+ s2 v

& _5 n+ v: ^) N$ Q# l4.重新确定中心
) K4 [' C( T7 M: d8 n7 j5 K新的中心为原中心的坐标平均值,由此得出中心1为(0,0),中心2为(6.4,6)! U* F- v$ N2 C/ ~( r8 a
5.重新计算其他点到中心的距离
, Q& n& Y1 K8 Y7 e! V! ?; n% I: ~8 V4 g* h5 U' t; _9 X7 \& u
计算距离
* B1 g4 U6 ?1 E6 |2 U$ [5 o6.第二次聚类结果$ l5 [9 v( o7 _
依据点离哪个中心更近,可分为以下两类:/ ^; t0 R/ C4 \/ ~9 k
1.Center1 (0,0)(1,1)(2,1). Z- t8 \# m: E7 r* G
2.Center2 (8,9)、(10,9)、(11,10)
; d1 u! c7 X+ V4 Y  B: `5 R& S6 |
# x7 V7 Q, q$ A' M2 k# [) G0 _* C第二次聚类结果
* k6 @: V9 u# j4 e2 P7.重新确定中心
5 D1 j9 l  O( ?8 N3 U" |新的中心为原中心的坐标平均值,由此得出中心1为(1, 0.67),中心2为(9.67,9.33)
* \5 [" W* {. t% w: |- \8.重新计算其他点到中心的距离- m! G6 Z; V& Q; F% h

+ Y' w% o1 d, M1 b7 ]9 A
0 m6 F, Y9 ]% [" h/ C计算距离
- Y) J. `; t3 S) Q9.第三次聚类结果$ |7 T- `8 x+ Z* B. C
依据点离哪个中心更近,可分为以下两类:
) u5 h; |, s* ]4 y6 ~4 v' k1.Center1 (0,0)(1,1)(2,1)2 V8 e0 g0 _2 a( k
2.Center2 (8,9)、(10,9)、(11,10)0 |5 _' j* S$ I6 ~
我们发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们设想的结果完全一致。) E* C2 u3 r8 }: r2 j
KMeans算法扩展) N- o- E- L0 l' Y% Y
5 h; M3 ~/ t0 E

    8 u( K( Y! r7 o1 s- s$ b
  • 对具体问题如何确定分为几类?& q/ L  T# B: [8 C8 W6 v: m
    多尝试几个K值,看看哪个结果更好. u1 m& P% ~% J! M3 _
  • 初始的中心如何选择?$ d" r" g6 t4 w0 {+ H7 g' k
随机选择,多次执行,看结果的稳定性
1 f4 b7 |0 J) w" g8 I. E8 f
9 E: I1 P6 I  ^! E7 y, J

    $ ~; t4 u/ @  Q( ^3 b2 S
  • 算法是否会终止! D8 J$ h  H3 {& z8 o  N1 ^
    $ l* s3 d4 x2 K( \- H
    此算法是收敛的,最终会终止
    8 S. m, ]: X7 H. B0 S" R  }3 ]0 Z
  • 算法的缺点
    ; @# Z  u% b0 _" c对非凸数据集表现不好,比如下面数据。
    3 k" V3 ?: s9 I8 P8 M4 l# s+ X+ d" S0 t

" I- [/ K! z$ C& n* H  f非凸数据集
' O; T& v- z6 ~  L参考文章2 V- T  y6 U8 a; S# e

- z" s7 e7 P& U8 }, h0 o6 a9 \# z8 R6 C

    % x) I* L$ {7 b9 g
  • http://blog.csdn.net/lwplwf/article/details/555068963 H; O2 x. w. e. L
  • http://www.jianshu.com/p/fc91fed8c77b5 i9 R6 o/ u' ~5 L* ]% y

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
推荐阅读更多+
阅读排行更多+
用心服务创业者
0851-88611148
周一至周五 9:00-18:00
意见反馈:admin@0851life.com

扫一扫关注我们

Powered by 童码少儿编程 X3.4© 2001-2013 0851life Inc.|网站地图