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

[复制链接]
cck123 发表于 2017-12-31 06:18:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
聚类和分类的区别
) V  c8 _/ K! }* S# o& _5 F3 o" `9 {0 C# `+ Z
机器学习中有两类的大问题,一个是分类,一个是聚类。0 g8 Y8 [9 d- y/ a, I
分类
& a; p3 Y! k6 s( c7 A监督学习,原始数据有标签,你根据原始数据建立模型,确定新来的数据属于哪一类。* ]8 G$ D4 W' P' n5 T0 w
聚类  C% R/ W& d4 z; A+ e: B$ k: H
无监督学习,聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。5 n  f7 f- `2 u6 K  L
KMeans聚类算法& a* c+ N% s7 @8 W
8 f' U4 J  f# l  _. Q3 [* L( G# v8 [
KMeans算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:% w$ e1 @/ X, B
1.随机选择k个点作为初始的聚类中心;4 w% A9 _( G2 k. W' n
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
: b9 O: h' t0 b$ u+ G1 b3.对每个簇,计算所有点的均值作为新的聚类中心5 H% @2 Z7 J# l% D# h, o, \( O
4.重复2、 3直到聚类中心不再发生改变
& f# e  D3 y0 D2 ?4 l2 O简单例子验证算法
9 s  j% u3 `' u, q
$ \3 f9 z9 E/ s- f我们假设有这样一些点:(0,0)、(1,1)、(2,1)、(8,9)、(10,9)、(11,10),画图如下:7 x5 O" @- r, Y5 b, u7 M

& y, g; Q3 h+ ?0 U. N3 m* m) Q: i" S5 @
原始点分布5 B# E9 q2 U# C  X* j
下面开始按照算法进行聚类。
' p& C4 G# v7 |/ l) z, O! W8 I, r: e7 p
1.初始聚类中心
+ \& M8 u3 `: {& U4 o. e7 p我们设置聚类中心为2个,随机选取聚类中心,比如选(0,0)和(2,1)! C- ^* B1 J) j! E& o
2.计算其他点到中心的距离
) I7 U0 z7 _2 B% e6 a0 x) `2 |" [% I
2 @/ a& w1 {. H/ b计算距离
1 i6 h0 b, M; P3.第一次聚类结果
1 q- O) }- G8 Z2 Y0 r. u# C依据点离哪个中心更近,可分为以下两类:
9 v0 N: P8 a1 p; l2 L, @1.Center1 (0,0)
( ]: U+ ]% i3 H/ s% K6 _7 s! H2.Center2 (2,1)、(1,1)、(8,9)、(10,9)、(11,10)0 m* q. q, {( l/ O5 v' @
) @2 G: }7 J8 S2 x
4.重新确定中心
7 N/ m- P' o) b3 O% k2 H新的中心为原中心的坐标平均值,由此得出中心1为(0,0),中心2为(6.4,6)$ B2 B! f8 U* t8 f9 S" \
5.重新计算其他点到中心的距离% ]& q# I; ]- Y9 h9 ]3 l  Y( g& C" Q
+ S$ l' {/ u$ q3 f' m
计算距离& K" O1 L+ L/ `2 I- Q0 I
6.第二次聚类结果
2 F" U6 ~  O) ?( S8 D依据点离哪个中心更近,可分为以下两类:& @7 K- F; L% K2 t) w
1.Center1 (0,0)(1,1)(2,1)
; b9 o7 d) K+ C" }2 F/ g- k" d2.Center2 (8,9)、(10,9)、(11,10)
' `+ X4 J5 z; k$ {
0 v/ S& q% \) \# D6 @7 Z9 i9 t第二次聚类结果
9 O' D+ s" H7 L" b% t& @* \; k. h7.重新确定中心0 z6 U2 E% a' W1 ], k& w
新的中心为原中心的坐标平均值,由此得出中心1为(1, 0.67),中心2为(9.67,9.33)
: t; F, Y3 d- \1 p. P( J8.重新计算其他点到中心的距离
! b# j" c. X$ L; [: P1 e5 b, F. b; D4 u0 `% r1 Q- H7 z8 }

$ }+ p# S; O( Y, R  U* v! `计算距离* _! k/ U! s* c
9.第三次聚类结果' D" A7 i! T4 J6 c$ I  T; H- R
依据点离哪个中心更近,可分为以下两类:
: f: B0 m6 d  p; P7 H# |1.Center1 (0,0)(1,1)(2,1)
* ~2 P" q% c8 Q( `% }2.Center2 (8,9)、(10,9)、(11,10)4 h0 d: A: i% i
我们发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们设想的结果完全一致。
1 n7 K  i; k  Z7 N3 aKMeans算法扩展
, G0 s6 T, w& z1 S
# j: u7 g! Y; i( z  [& i
    " N( Y. t$ `& ^2 _# H
  • 对具体问题如何确定分为几类?
    ! ?" b! ~' X' j2 ~1 p& q. k" ^多尝试几个K值,看看哪个结果更好
    ; E# i; d0 w" x; L2 u& B6 n! V
  • 初始的中心如何选择?" H7 A' m$ ~6 \8 i( K# Q
随机选择,多次执行,看结果的稳定性+ m4 q& U! `  s) N- l

' F* B" }# t& s3 ?2 L
    4 {- W9 N( r# J) g+ w0 t8 b
  • 算法是否会终止/ d- F0 D5 V, A& z- q, [- _+ M

    0 k# F! W# q$ A- L3 ~3 w此算法是收敛的,最终会终止9 E& V7 y4 m+ Z% O4 ]
  • 算法的缺点& m/ g( k" d+ P1 f% E+ s
    对非凸数据集表现不好,比如下面数据。
    2 M3 O3 F! V8 }7 S  J7 }( [+ @
1 ^! ^! e3 w! I  n* Q4 B
非凸数据集; O" M: e5 {: ^' N
参考文章
! U* C8 V6 `# L) U& _/ h6 l. {: d

8 ^2 {/ S- w" G, u9 z
, c8 E* V2 }' P1 m$ v9 g% z! c3 ~
    - o! j( p! n. r& {( s
  • http://blog.csdn.net/lwplwf/article/details/555068968 R4 L9 q' m$ S6 ]9 P8 M
  • http://www.jianshu.com/p/fc91fed8c77b
    2 c# Y  v6 U' ^- e( p

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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