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

[复制链接]
cck123 发表于 2017-12-31 06:18:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
聚类和分类的区别
  a/ m; @' d# B3 I
9 ?: @  M9 I: F0 B! {5 J: K机器学习中有两类的大问题,一个是分类,一个是聚类。  c6 `# k8 v0 S2 z/ [3 W3 L
分类
2 i& f; k. |; O" U. n监督学习,原始数据有标签,你根据原始数据建立模型,确定新来的数据属于哪一类。- v4 U9 @. N5 k- k3 L" u! d& T
聚类8 A  P2 @5 L; k: J2 J
无监督学习,聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。
- H* ^0 W" s7 s" Q" T/ {KMeans聚类算法) `9 ]# D. c6 Y2 F9 m9 Q7 J# V
9 q5 E( h9 a/ ~$ U+ J9 h! O
KMeans算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:/ f  y- E2 f0 q; {# @
1.随机选择k个点作为初始的聚类中心;
6 \' ?2 J* ?3 K/ {) h2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇( ?' _) H: a' O5 A2 T9 s6 L
3.对每个簇,计算所有点的均值作为新的聚类中心
2 ~! q0 G% V* w9 i+ [6 d+ L  P, x7 h4.重复2、 3直到聚类中心不再发生改变
1 J+ i9 V9 G3 b0 T# M& r$ @9 O简单例子验证算法# s& s' h0 S7 \2 n2 d

2 V; d7 P% O  p1 k0 {1 Q我们假设有这样一些点:(0,0)、(1,1)、(2,1)、(8,9)、(10,9)、(11,10),画图如下:
( }; d0 }. ?& |' q: Q$ D  M) r6 Z5 Y7 f$ x* E
4 x( I  }) q7 v( Y4 {' r: F, E
原始点分布
8 K4 ?  @/ @/ R& a$ ^" o4 E! h: g下面开始按照算法进行聚类。
2 v5 o7 ~6 K' g- |; H; E8 R3 H( ?# {9 D: p
1.初始聚类中心
' \, F  t; J; B6 |* J9 u$ N; e& M我们设置聚类中心为2个,随机选取聚类中心,比如选(0,0)和(2,1)2 ~5 ?5 z0 b& G
2.计算其他点到中心的距离
/ O; g( _; Q% d- C" @$ b
% E  X/ X3 Y; |: n" Y& D( ]计算距离6 P4 @5 t* Y' z" h/ p3 z+ P
3.第一次聚类结果
3 h7 _) x" a3 Z" \依据点离哪个中心更近,可分为以下两类:
7 _0 F: T8 J& U8 R9 B0 V1.Center1 (0,0)
6 s' ^$ B. F) Q4 z4 D& P- x2.Center2 (2,1)、(1,1)、(8,9)、(10,9)、(11,10)4 G4 E% n! w4 h/ y# d+ G$ i2 }2 j

# a3 s3 X. I/ c9 j4.重新确定中心7 X* s! {9 z) ]& K
新的中心为原中心的坐标平均值,由此得出中心1为(0,0),中心2为(6.4,6)/ Q5 `5 s) H* B5 p$ n+ E1 q* U
5.重新计算其他点到中心的距离; t0 l8 ^( i/ q( H, ]+ i! i5 [7 w7 o

8 N1 I9 C5 v  ^) Z计算距离# L4 }$ y- R7 r) D+ I) j
6.第二次聚类结果/ z6 I0 o; k, u9 U' P- t
依据点离哪个中心更近,可分为以下两类:3 w. v* @  }$ `$ y/ c
1.Center1 (0,0)(1,1)(2,1)
+ u5 V, X$ U9 k0 [. z7 w" y2.Center2 (8,9)、(10,9)、(11,10)
% u  g! K& D. l! v1 g  [% I$ ]% w) Q  {- p8 w
第二次聚类结果! \) c* `( P) e! {, _: i( ]
7.重新确定中心8 Z% p% A. x' D  S1 p
新的中心为原中心的坐标平均值,由此得出中心1为(1, 0.67),中心2为(9.67,9.33)' ^9 K9 n- X8 M) E
8.重新计算其他点到中心的距离
& w) `$ h1 x3 @% a
; h: \7 b6 Q9 S; V! z9 S: v: V8 A7 S: c1 R4 {) l
计算距离
/ l" ^( }5 G9 f" P/ w9.第三次聚类结果) @5 Z, [& ?6 c+ J. A
依据点离哪个中心更近,可分为以下两类:
/ U- k! E7 }& T" H1.Center1 (0,0)(1,1)(2,1)! o! k" }' G% X9 C8 \. G. ?) x
2.Center2 (8,9)、(10,9)、(11,10)7 w" M* [6 w8 k9 Y
我们发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们设想的结果完全一致。
0 f) Y. ^, a2 A( OKMeans算法扩展
8 M; ?3 Q0 X2 ]4 r8 e/ [& c9 m( W; M& ~8 W2 [5 G& h* R

    2 y) @  Y& w: U1 E
  • 对具体问题如何确定分为几类?) g; z* E0 U) B1 {& e$ [# W0 L$ v( T
    多尝试几个K值,看看哪个结果更好9 t1 \4 A3 E% g  |: t
  • 初始的中心如何选择?* {0 y0 c. M1 r2 |
随机选择,多次执行,看结果的稳定性0 r  V9 U; z5 f7 O9 ]7 a

3 A3 U( }% U3 B/ f: G6 ~
    9 b4 p& x% E% k* ^' r& x
  • 算法是否会终止
    , w# P0 q. P  \" T& f& T: ~1 d& p3 V
    # `5 v0 ~0 O' M. j, \此算法是收敛的,最终会终止
    ! }' u0 w4 e. x3 ~
  • 算法的缺点
    6 U* f5 u# W! Q6 v, C对非凸数据集表现不好,比如下面数据。, e* e$ }" R; P6 e8 a2 T5 B% [6 B
      ]' ]* U: J% k# ~! x/ n8 D

1 d( r' i$ F& x- ]9 Z+ \3 E+ N  O非凸数据集7 r  ?* i$ y' v4 Z0 |" `/ V
参考文章
  ~, ?: g2 k# z4 Y
5 F6 F; k7 S! o; }4 \
8 v5 \8 z2 p" m% X# y4 `: a0 [
    9 }: N+ I! h8 a2 h" ?9 J
  • http://blog.csdn.net/lwplwf/article/details/555068968 A- g' r2 X3 k: X
  • http://www.jianshu.com/p/fc91fed8c77b: Y9 [1 t6 k' D, ~; F4 J

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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