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

[复制链接]
cck123 发表于 2017-12-31 06:18:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
聚类和分类的区别5 S' h6 F7 h( h8 z; x

) I# y7 x/ o7 W  {* F, e机器学习中有两类的大问题,一个是分类,一个是聚类。! g2 g# i/ z) w: n4 V% u
分类' x4 x7 u, U/ S% R: W. u2 I
监督学习,原始数据有标签,你根据原始数据建立模型,确定新来的数据属于哪一类。
6 V6 `3 b4 H" G/ S5 P- I. K5 ^聚类0 f4 z3 @1 v; o+ T
无监督学习,聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。% F8 C: ^) d# T! B8 r7 K5 _
KMeans聚类算法
% s" g* L; v$ J! y- N% n5 e0 o, N7 v( m, j8 p* o8 G
KMeans算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:) `) _* a9 ~# H8 n% Z  I
1.随机选择k个点作为初始的聚类中心;, x) q% `: I  g- c, z
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇9 {; z  K! G7 \5 m, v4 N& R2 X1 T
3.对每个簇,计算所有点的均值作为新的聚类中心; e  I" G2 X+ J. l8 [9 J% L6 u
4.重复2、 3直到聚类中心不再发生改变
+ v3 r* |& z1 }- z6 g3 i简单例子验证算法& w4 l/ Y4 o/ @& R) w/ O  R

' Y* c( p' ?+ n' g7 M我们假设有这样一些点:(0,0)、(1,1)、(2,1)、(8,9)、(10,9)、(11,10),画图如下:$ |" p7 k5 I6 q
6 V0 p1 Q7 h$ k4 g/ W

, n( f+ y5 ~, F6 k% P原始点分布
. ~7 l; R! E  r$ t. ]' Z! z. m下面开始按照算法进行聚类。2 r- _, Q( K2 H6 r

! u+ I- b  `, ]5 u: H, a1.初始聚类中心
3 i- t9 O. y% s  `/ ]* W我们设置聚类中心为2个,随机选取聚类中心,比如选(0,0)和(2,1)
7 |) f$ [  v3 X4 ~2.计算其他点到中心的距离/ a# K3 I3 [+ I5 r
; K$ O, ]1 l, D5 y/ F7 a
计算距离
7 R, B" W# u5 I' D7 \3.第一次聚类结果1 S1 s8 n; H& R
依据点离哪个中心更近,可分为以下两类:5 \8 L* n5 w! Q
1.Center1 (0,0)7 g6 u3 k; C: b5 E. S9 z
2.Center2 (2,1)、(1,1)、(8,9)、(10,9)、(11,10)
" H+ o- W6 A* F% ^# R4 S8 Y
4 B# g) y: t6 e6 m4.重新确定中心, Y% E9 N# [$ u% I8 z
新的中心为原中心的坐标平均值,由此得出中心1为(0,0),中心2为(6.4,6)2 N, Z1 c4 J9 z2 L, o% J# T3 D
5.重新计算其他点到中心的距离  w- [' k3 g8 h- A+ C) ~2 W

4 k7 l' Q4 R. M" N, x计算距离
5 l5 g* G# b( x" M# X# C  i4 O6.第二次聚类结果# i% Z: n/ t1 W* p
依据点离哪个中心更近,可分为以下两类:
7 m/ W; I: W; N4 Z( b1.Center1 (0,0)(1,1)(2,1)
+ `( Y7 u% K- h2.Center2 (8,9)、(10,9)、(11,10)0 I% @2 b* t9 l% v% _  U0 u; }; ?% j
6 v; v9 h( x. M; R% x& t
第二次聚类结果# i3 Y6 h% v8 C" J5 ^7 D% m4 ]3 Z; o: H
7.重新确定中心
5 o/ Y: T) |! N新的中心为原中心的坐标平均值,由此得出中心1为(1, 0.67),中心2为(9.67,9.33)+ e& d% V' a! v" Q4 ^' O9 n. j7 u
8.重新计算其他点到中心的距离
/ s0 F' r+ M+ J) V
/ U; S9 R: @8 w/ p# n* s0 L9 h' F0 n; S( r
计算距离
2 ~: q( F5 u$ e& m9.第三次聚类结果
+ h% ?, R9 j* V3 K$ j" A依据点离哪个中心更近,可分为以下两类:
+ V, g+ p7 v' ]) W  j1.Center1 (0,0)(1,1)(2,1)$ u; p( X! ^5 f/ V- R
2.Center2 (8,9)、(10,9)、(11,10)$ k; v. S, e0 j4 f, K' Q- \. W% W' a
我们发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们设想的结果完全一致。
4 `7 G: f. Q  R" G0 G9 gKMeans算法扩展  [- j: n( X8 C# b6 u
9 }/ U/ \9 a5 h5 P. m  V

      n( E$ n+ z8 ]8 j7 F$ T
  • 对具体问题如何确定分为几类?
    - p$ [( @; z- y" L9 @5 X多尝试几个K值,看看哪个结果更好
    ( M, {1 p' |0 Z
  • 初始的中心如何选择?/ x9 j7 U7 S( l  ~" v
随机选择,多次执行,看结果的稳定性
' w2 c: X- Z' S* [/ G! M
3 z& X6 h4 G: V) `
    8 E' ]* Y: i: u# e
  • 算法是否会终止& F( G5 m4 X4 s8 B5 S

    9 I, c2 }) m5 q3 g. N# a/ Z1 o此算法是收敛的,最终会终止: V- w0 {  y/ d/ v, r4 `7 E5 Y. C
  • 算法的缺点
    7 l, e+ G' }* G! N3 `对非凸数据集表现不好,比如下面数据。
    - ^! W5 C3 D- J& P1 a" t$ x: `! F) J/ L; g; |" S! Q

) }. j& L3 a! l( G0 k" h非凸数据集& M3 p! p/ t# h
参考文章
5 s& m% K' l! g1 B

. F: O) K( |& [7 f5 M3 `  e
9 h! K$ J5 i& p4 `3 y2 t  S

    ) ?0 e2 [. [% G8 j7 l
  • http://blog.csdn.net/lwplwf/article/details/55506896
    4 k0 ^3 q; Q4 ^7 Y& m; o2 A& c
  • http://www.jianshu.com/p/fc91fed8c77b0 {  J! O/ V# N: M! G. ~( x2 q' t

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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