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

[复制链接]
cck123 发表于 2017-12-31 06:18:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
聚类和分类的区别; x$ Q* \- ?, T! `' n7 c6 ~
* [! o2 F4 B" `
机器学习中有两类的大问题,一个是分类,一个是聚类。) D  N: R+ j2 r, U. F
分类6 f3 F- x( Y2 Q4 j
监督学习,原始数据有标签,你根据原始数据建立模型,确定新来的数据属于哪一类。7 ]9 H1 t" X. {- y+ Z& B
聚类- H+ p" ~: _- ~4 q% Y! Y  }2 S
无监督学习,聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。
. {; Y9 ^& K# C- t+ ~6 _( mKMeans聚类算法1 c* v/ n9 R7 k9 h" W. R) ^2 S7 a
% \7 N% M7 S6 ^& u( N# G! k
KMeans算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:
% X% _: D& ^) [1.随机选择k个点作为初始的聚类中心;: x) x8 i4 q. l/ S
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
# I3 s7 ?: E7 F' f3 }3.对每个簇,计算所有点的均值作为新的聚类中心: K$ Q/ h, k5 c5 H( J
4.重复2、 3直到聚类中心不再发生改变
* O  \' K" b  d; I7 N& g简单例子验证算法: g& t0 Q; b  w+ {8 c- U7 D7 u

7 t' w- \3 u9 C! W3 }( O我们假设有这样一些点:(0,0)、(1,1)、(2,1)、(8,9)、(10,9)、(11,10),画图如下:
& {9 g9 U" ~. N6 r% B# V& Y8 i9 C% T4 o: E  R

8 C. L7 O3 M" T5 J2 w$ B$ e( O1 K原始点分布
- ~3 z1 l/ w5 x下面开始按照算法进行聚类。
5 J( _* x& t, Y% R
8 C- a1 [+ }3 P& I2 Y1.初始聚类中心
* _- ]* S' r. T: G" ]2 V+ `9 d7 _我们设置聚类中心为2个,随机选取聚类中心,比如选(0,0)和(2,1)& {2 A! C% X2 Z# t! w
2.计算其他点到中心的距离
4 U( g. e  U  X6 C4 O
6 a0 R. J: S' J. z计算距离4 w8 L0 i6 S$ W! J' V) |
3.第一次聚类结果
0 N2 N' ?0 a& @- }: a依据点离哪个中心更近,可分为以下两类:
* `+ D1 O* S2 E7 C1.Center1 (0,0)
( {8 D/ \" I$ s0 Q/ K2.Center2 (2,1)、(1,1)、(8,9)、(10,9)、(11,10)  p1 y4 V% F4 b: I

7 }: U, s  u% ?+ D, H% S9 ?8 f% q4.重新确定中心' R* j+ j' R7 _  S6 ]! c# V* P, \
新的中心为原中心的坐标平均值,由此得出中心1为(0,0),中心2为(6.4,6)6 u' Y+ i/ g) [
5.重新计算其他点到中心的距离
7 ~& K! s+ g% P% I
- y( g6 G: c) p/ A, ~8 y2 ~计算距离
  @/ Y6 h5 \/ |3 t6.第二次聚类结果+ D7 P5 R* d- C4 W6 N! I
依据点离哪个中心更近,可分为以下两类:" M! S6 L+ \, v
1.Center1 (0,0)(1,1)(2,1)
8 g6 ]4 a. D$ X2.Center2 (8,9)、(10,9)、(11,10)
! |% t) y% u8 l3 {" y
2 z$ R% u; V# W0 t) B; Y- L0 n第二次聚类结果
0 P/ O. r5 t$ V7.重新确定中心
4 d3 S3 ~; h. j- H* w/ W新的中心为原中心的坐标平均值,由此得出中心1为(1, 0.67),中心2为(9.67,9.33)
1 _* e( R2 O9 d+ O8.重新计算其他点到中心的距离
  I! [% S. D$ w$ u$ |+ a" b
9 T, ?% X, F7 }9 O+ f7 u4 C- U
- K1 E1 ^3 ^3 e6 K计算距离
4 A* o" ?" f; l/ e5 a9.第三次聚类结果# f, y* J+ a% s4 U
依据点离哪个中心更近,可分为以下两类:
, W: g( x% E) x& c1.Center1 (0,0)(1,1)(2,1), G7 A% t  P. n* x+ G: }( I8 r! j
2.Center2 (8,9)、(10,9)、(11,10)/ x7 I  N3 m, M
我们发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们设想的结果完全一致。
! p, m; K( g1 ^2 n" pKMeans算法扩展; J4 f0 V& P  K1 i5 ?6 W' y) q

! @( {* r% D/ z7 v; x" M8 e0 j
    ; g# A: U2 |6 _0 |7 Z
  • 对具体问题如何确定分为几类?) F) ]3 y; P* u# Y! Y$ K
    多尝试几个K值,看看哪个结果更好! Z9 R) B0 h* E5 ?% p; C9 z5 ?
  • 初始的中心如何选择?
    3 `1 s2 r( Q: G! y
随机选择,多次执行,看结果的稳定性: n, o( v3 P. @! B1 }' u, O
$ Y$ K$ j# A. R* G4 i

    * W1 L/ S1 g6 |7 J
  • 算法是否会终止
    & R+ n5 t- p. z4 }% H/ `# _2 o* G' \1 u! U0 t
    此算法是收敛的,最终会终止+ M1 E2 |0 G1 k* S9 V
  • 算法的缺点0 T6 F8 T+ h, @
    对非凸数据集表现不好,比如下面数据。; e0 `1 R7 L; S& [& t* X
    9 {/ w# M; s4 g4 |8 ~

/ n1 e8 r; _/ b/ Y# a  F非凸数据集" d& \: L+ T& @* n- V# U3 C( _5 O
参考文章
6 g9 M# _' L6 j- Y
# z# |; {8 y6 f4 Z' ?! o0 e; K

! A2 v0 o& s1 y: B  R/ U
    0 I( J' Y) O* j* J9 M* `
  • http://blog.csdn.net/lwplwf/article/details/55506896
    8 w1 t/ s( F. _0 V3 u; \2 Z0 b
  • http://www.jianshu.com/p/fc91fed8c77b8 d, [) l/ Z9 u! U8 b4 ^

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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