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

[复制链接]
cck123 发表于 2017-12-31 06:18:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
聚类和分类的区别
8 Q8 D  J- B- p2 i) `, y+ I8 D4 E2 M
机器学习中有两类的大问题,一个是分类,一个是聚类。4 E! J- V: V; ]% k1 u
分类  W+ Z( f# ~2 L! L
监督学习,原始数据有标签,你根据原始数据建立模型,确定新来的数据属于哪一类。( G; H- k: h5 g. x/ G3 w" W# ]7 T. M
聚类
6 j6 V4 p# K: z6 }% _) m无监督学习,聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。
) }* b5 R4 x& A" m8 q( d! {KMeans聚类算法
& k$ Z/ o, b8 W: z5 R! S
8 r+ Z* q" t% s$ l, u5 Z* q: IKMeans算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:; S* r! C' T- Z
1.随机选择k个点作为初始的聚类中心;" x. j! C6 Q4 O' r7 M
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
+ V6 @! V' S! t' B) P3.对每个簇,计算所有点的均值作为新的聚类中心) L* J! T3 u! s# Z5 L
4.重复2、 3直到聚类中心不再发生改变
( T& l& A) X9 l- g) G简单例子验证算法5 R% C$ {; T6 A2 v# u9 b6 c5 X

# Z7 S$ f6 W: D7 m* r我们假设有这样一些点:(0,0)、(1,1)、(2,1)、(8,9)、(10,9)、(11,10),画图如下:+ {' L% M1 x# P
  @  }) d/ L8 X* m$ m+ I
0 h/ |6 z. Y1 _0 ~' ], f; i
原始点分布
  E8 P. ]  {! [4 p下面开始按照算法进行聚类。; A- N" H+ ?+ B8 F5 ?3 v4 }8 `) b. X

  v! `" j) @7 |7 E" ]1.初始聚类中心
8 W, T6 ^6 E/ ]0 Z0 `1 ?, o. Y  i我们设置聚类中心为2个,随机选取聚类中心,比如选(0,0)和(2,1)
: c1 d; S# q' ^  I) X2.计算其他点到中心的距离
# _% {1 h4 S# v: J3 c/ a8 e. a" `. a) A4 ~/ h8 o, ^  n, k
计算距离
7 e) W8 N5 S4 u- K# U9 m3 v: d5 K3.第一次聚类结果( ^; d) m3 \  R# o& F
依据点离哪个中心更近,可分为以下两类:
* |: J% o# P5 @. o: w1.Center1 (0,0)+ w. F( c, F, _; x1 v- ]! R
2.Center2 (2,1)、(1,1)、(8,9)、(10,9)、(11,10)
$ M) U' Q% o1 ^9 s, c5 p
% l- X& B# l* y  O; F4.重新确定中心
3 H- k7 Z" m$ O& F) h新的中心为原中心的坐标平均值,由此得出中心1为(0,0),中心2为(6.4,6)" r& ~! y" _  f/ R( Q, D: }: ~/ v+ h4 t
5.重新计算其他点到中心的距离. V5 N! N5 _  W4 B% I' Y' [% q# u
' G" s9 G7 k% p0 F" n
计算距离* J5 {: N, N5 [( T/ F
6.第二次聚类结果) @9 Z- k1 `4 ^( u) i: D: p; e: e
依据点离哪个中心更近,可分为以下两类:% S, j8 G4 J0 k
1.Center1 (0,0)(1,1)(2,1)
; a" w& u+ ]9 E$ A6 [5 x2.Center2 (8,9)、(10,9)、(11,10)
/ R7 A$ L- U3 o& F# W& d. U% \% B2 F2 L( V
第二次聚类结果, t' K4 w$ s* W7 |  q4 [& e& Y9 T  U
7.重新确定中心
# @1 B, h* }# I" v# T新的中心为原中心的坐标平均值,由此得出中心1为(1, 0.67),中心2为(9.67,9.33)2 E8 _4 ]2 c4 L0 l; J
8.重新计算其他点到中心的距离; j+ u' z, N, f
8 a4 ~4 y' v1 C

& J# \& J9 T0 L0 u5 U. A; B计算距离
9 E* G! ~+ p1 v; @9.第三次聚类结果1 b& X4 p4 m3 f9 z' M" y5 S
依据点离哪个中心更近,可分为以下两类:
" x( K# u+ q. b0 R1.Center1 (0,0)(1,1)(2,1)+ e' h9 j1 J; N
2.Center2 (8,9)、(10,9)、(11,10)) j+ \5 C( ^" |) P  k3 b
我们发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们设想的结果完全一致。
% N+ o1 I5 `( l7 yKMeans算法扩展
8 ]1 ~. Q/ l, H9 G8 [. [2 i2 g; z& U- T( `4 A
    & w0 ]; u6 @/ j' L
  • 对具体问题如何确定分为几类?
    . [4 O/ c9 @* {多尝试几个K值,看看哪个结果更好) \- t* }! |' w7 {4 f
  • 初始的中心如何选择?* u6 X5 V' g$ R7 Z6 ~7 E% L, V! ]6 a
随机选择,多次执行,看结果的稳定性
( A; M  F, n$ I  Y" K0 I8 V
+ A- d1 C3 K6 ~* r3 s! @
    + h* ?/ c: `0 f$ A# q# g
  • 算法是否会终止
    ! i7 f) T0 W' O) g6 F+ }5 K* Y! a* R7 @6 l" O! u6 L: C
    此算法是收敛的,最终会终止
    ( @9 ?+ V$ _. a" M3 m" L6 w( u: [
  • 算法的缺点  ]) c% D8 C2 M/ J
    对非凸数据集表现不好,比如下面数据。  e3 C0 j* T! y. s5 |5 w: P5 ?/ h

    1 e$ f" o8 G( G

. E  _3 u' ?9 {非凸数据集3 `" M% K! x: {7 y
参考文章
9 H$ t8 F# ]: D0 l: V( c- V4 H; ~
# J) ^/ z& [& ?- e$ p/ {) O9 l$ n

7 S$ t- Z( t3 H" Z. `
    . @, u% g8 ]* `6 A1 g: l, }: m, p# D
  • http://blog.csdn.net/lwplwf/article/details/55506896) w2 @2 Y8 ^- T0 D4 A0 Q: d
  • http://www.jianshu.com/p/fc91fed8c77b
    ! ^' l7 f. ~6 ?  P2 b$ F

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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