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

[复制链接]
cck123 发表于 2017-12-31 06:18:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
聚类和分类的区别, w+ p) {( ~/ O1 ]
7 ~: x1 J, I, y1 ~/ A) q7 R
机器学习中有两类的大问题,一个是分类,一个是聚类。. w( h: [- N2 F1 K
分类) k9 u& M1 W) X7 [* V
监督学习,原始数据有标签,你根据原始数据建立模型,确定新来的数据属于哪一类。
% j/ m% U& i# G- \% i, A聚类
7 F/ Z9 v; D7 A  K+ n无监督学习,聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。
* l; d; g, P, S+ M# M4 }2 D- VKMeans聚类算法
( n; \3 t( f+ S2 E( H* v% X- l1 v
" B" }% ]- j$ I( p3 }- B' Z0 ?KMeans算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:
- S3 }2 E' u- U2 o# I1.随机选择k个点作为初始的聚类中心;( K# I) F9 ^1 M: T  G
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇" q) s3 K1 Y/ w8 r9 p! ~+ H
3.对每个簇,计算所有点的均值作为新的聚类中心. J$ Y1 O" ^4 y8 z- e, F3 F
4.重复2、 3直到聚类中心不再发生改变2 T6 x- Z; q0 a0 e$ w
简单例子验证算法7 b' G4 C! @( u' s
) I5 T' F+ S0 G$ o$ q1 \6 U
我们假设有这样一些点:(0,0)、(1,1)、(2,1)、(8,9)、(10,9)、(11,10),画图如下:: a! Y+ U( a% K9 f& L

. ^/ S3 |- k& p; Y" H! e* a; Y& L- h  \9 i6 s* |" s
原始点分布
1 r+ @/ e, Z( L7 _) {& C9 `下面开始按照算法进行聚类。, S4 Y  I- O6 i7 o. X4 Z% w
) D9 }* g/ x' f7 {
1.初始聚类中心
+ D  Y' T& X7 Y! d0 P我们设置聚类中心为2个,随机选取聚类中心,比如选(0,0)和(2,1)
: N# ^9 [6 i8 [8 x2.计算其他点到中心的距离# V: g" ?0 v) n1 u4 q

2 I! t$ K) `/ G$ W0 q, M计算距离
, G4 T1 p3 L/ f) t! \0 L3.第一次聚类结果7 |, O! E, H( ^/ N8 K
依据点离哪个中心更近,可分为以下两类:+ v) J1 Q" U7 |3 g; P2 x
1.Center1 (0,0)+ ?% t# M$ C& _  A! J: |8 j
2.Center2 (2,1)、(1,1)、(8,9)、(10,9)、(11,10)
! t' ]3 X& O: b1 _+ N" d: z, a  D  e
4.重新确定中心
  M5 k. g8 ?1 r8 Z' z# ]' j$ |新的中心为原中心的坐标平均值,由此得出中心1为(0,0),中心2为(6.4,6)- i/ ~6 h5 A! t7 p  b6 D
5.重新计算其他点到中心的距离
, ?+ B6 D2 s. L7 Q  s, T; y( n
: X1 v' D2 t8 Q7 J: B8 L- E" k7 ]计算距离
3 b4 P' K# y6 X9 n6.第二次聚类结果6 e: {7 @  o) a4 [" F9 h
依据点离哪个中心更近,可分为以下两类:! ~& X$ e5 `3 G, D: p
1.Center1 (0,0)(1,1)(2,1)' |7 w# v: F) E7 ]  B' z# I6 z
2.Center2 (8,9)、(10,9)、(11,10)% `4 b9 b7 O% |' {( A3 E5 ?: a: q3 w

% p! o; _9 l* `第二次聚类结果' x! r- a% K" s7 {4 D
7.重新确定中心
: l! m0 [: `2 n, x: R9 }新的中心为原中心的坐标平均值,由此得出中心1为(1, 0.67),中心2为(9.67,9.33)( t" h9 G5 S" f9 Z2 J  m6 }0 q3 ~
8.重新计算其他点到中心的距离
2 E) l0 Z* S% `5 Z/ L4 U! y6 B3 Z0 b" G; \

" h% W( R6 f- d0 y* q. v8 ]9 ^& p计算距离
) r1 g! G. z  H) ]8 B9.第三次聚类结果  |9 Q& G/ Y- V6 S+ W: z9 k' h
依据点离哪个中心更近,可分为以下两类:
" ^6 y8 s( X; H$ N1.Center1 (0,0)(1,1)(2,1)
$ l. B' C; Z- W2.Center2 (8,9)、(10,9)、(11,10)& i  A; l2 q" d' X& y! y
我们发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们设想的结果完全一致。
1 R, r" Q% }( \KMeans算法扩展
6 s0 @6 h% H4 c# c$ M4 O. X' L, K* n1 D; W3 b% T
    5 f4 S3 x3 }3 n- F5 e0 P
  • 对具体问题如何确定分为几类?
    ) A3 {; R. }! e6 d; q多尝试几个K值,看看哪个结果更好
    8 E1 d2 C* ]: z8 _% \; `% b
  • 初始的中心如何选择?
    . f, l, \# p0 I/ |, y; p7 `
随机选择,多次执行,看结果的稳定性" R6 a; w" h, z- ]( d& G* N
# P) ?' f' }7 I- ~
    $ D# m: M/ \9 j' v
  • 算法是否会终止
    - _; u+ R" ?/ l/ T
    # @6 v! F1 \' l* H8 t此算法是收敛的,最终会终止5 w8 g" K! z# E- Q% J1 f
  • 算法的缺点
    : O" E2 C5 N5 u$ @' B对非凸数据集表现不好,比如下面数据。
    # e. C4 @# _5 J- Q2 T
    6 F- L% \6 o/ C6 Z( ~2 j( k4 B0 i
' j# |2 c* f- A& o
非凸数据集
- |0 m( Y: s- y- I4 N) V参考文章# s2 t) A  n, F8 P

) Z( T7 r* S' I) s9 |3 k, ?( u5 W- {+ P! X& q

    # j) _4 u  |8 z* P1 x$ q
  • http://blog.csdn.net/lwplwf/article/details/55506896+ [$ t. ~4 t- ~8 S1 D; Y, d
  • http://www.jianshu.com/p/fc91fed8c77b0 @8 H* D0 x; C

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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