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

[复制链接]
cck123 发表于 2017-12-31 06:18:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
聚类和分类的区别& [$ S7 O, C$ R4 M+ U( U
2 p' [! q6 D& B
机器学习中有两类的大问题,一个是分类,一个是聚类。7 o$ R9 k% n" F3 m5 y. e
分类4 |, r$ h, G' p
监督学习,原始数据有标签,你根据原始数据建立模型,确定新来的数据属于哪一类。) Z, ?$ B5 @" @* g9 E2 `+ D, @# |6 C
聚类
7 S' U5 E' i: \& W" Q无监督学习,聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程。
# C2 N: k0 Y" lKMeans聚类算法+ p# o- q( V7 r" ~. R5 _) Q9 k, ^; k

% o" F6 q" [6 ^7 l2 J  [KMeans算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:" E& Y3 f, r! S& R
1.随机选择k个点作为初始的聚类中心;
6 |% @/ m" X- `2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇" f9 c" h$ D/ o
3.对每个簇,计算所有点的均值作为新的聚类中心1 ^/ ~4 G$ [) K1 q
4.重复2、 3直到聚类中心不再发生改变# j) P1 G3 `$ G6 g( F9 v. }
简单例子验证算法
+ a  r& e; Y: y# ^8 z3 `" \
2 }, h* K7 |! c* b我们假设有这样一些点:(0,0)、(1,1)、(2,1)、(8,9)、(10,9)、(11,10),画图如下:
$ o5 Q5 \. _3 E& u! S) L, C+ m* k8 k) d- m6 u- Q. d7 b% z( V& e1 g  I% }+ G9 Y

+ H* V1 \% e1 v# O/ D! k9 X* t原始点分布
+ v/ l( Q' u0 O" N9 L下面开始按照算法进行聚类。
. l$ J; Y) x3 P6 A  Q! V
' ~/ e5 W- \7 d' ^1.初始聚类中心
) r  W" b) ?8 @. q1 b* T- M我们设置聚类中心为2个,随机选取聚类中心,比如选(0,0)和(2,1)) ^" V$ p+ r; A' q$ a2 d/ o3 {
2.计算其他点到中心的距离9 {) ]& q/ ~% w- A+ T  h
- R! y7 ?1 G0 _8 F: `( Q
计算距离8 [9 Q. o8 \6 g: e- ~" |, J9 i
3.第一次聚类结果
9 |' |" f. D+ M4 M1 Z3 R" M3 `  w依据点离哪个中心更近,可分为以下两类:
' g0 e" Y4 \, v+ B" U1.Center1 (0,0)
  @. d) p$ T& E- R2.Center2 (2,1)、(1,1)、(8,9)、(10,9)、(11,10)
5 M' m4 u9 I% [$ u1 c2 P+ F2 f, K3 i9 A$ j( w9 \
4.重新确定中心
8 }' D% C% `/ `3 y$ c; R+ w新的中心为原中心的坐标平均值,由此得出中心1为(0,0),中心2为(6.4,6)
6 Y8 E1 i8 r0 \: d! k5.重新计算其他点到中心的距离9 F4 N% F, v" H

5 O0 d3 @8 l, e' l计算距离9 I, z- y' y% L# A/ R
6.第二次聚类结果
) U6 a9 S. c' v1 p8 L- m) ^依据点离哪个中心更近,可分为以下两类:
, H* Q3 R; z9 d- K1.Center1 (0,0)(1,1)(2,1)4 C1 }+ @# A, c8 D+ f+ k! h
2.Center2 (8,9)、(10,9)、(11,10): N) Y0 Y  Q! b

* o6 o# O: g+ M" ]" {$ F第二次聚类结果
  n/ C! }2 C3 f) ]# [7.重新确定中心
: m5 [9 p1 o1 M: c, W# L新的中心为原中心的坐标平均值,由此得出中心1为(1, 0.67),中心2为(9.67,9.33)
% j1 A% X$ q! K0 k/ ?8.重新计算其他点到中心的距离( a5 E3 L% [% o+ Y0 v  E

% d' J6 C- W: W; D. J- u- t& ]5 e# ]% G
计算距离4 t- b8 `' Z" U7 h; i6 J' j
9.第三次聚类结果
) v+ f0 C- D! l7 F+ o" z3 `: h依据点离哪个中心更近,可分为以下两类:
9 m0 @( B, }5 _: A1.Center1 (0,0)(1,1)(2,1)
7 }) g5 z  v5 D; m. z2 z3 C2.Center2 (8,9)、(10,9)、(11,10)) T9 r1 e4 @/ O8 m8 ^$ d; i; C5 l9 @
我们发现,这次站队的结果和上次没有任何变化了,说明已经收敛,聚类结束,聚类结果和我们设想的结果完全一致。
& a8 U" N. d  v* w6 `" {KMeans算法扩展
1 Y/ L; t; a/ f
! E( _0 Z( ?/ @! \
    , N5 m/ k: u+ X
  • 对具体问题如何确定分为几类?
    7 l+ C; s- _1 m+ \( `多尝试几个K值,看看哪个结果更好6 {' w* u" y- }& }7 I
  • 初始的中心如何选择?
    + m( F! Y* b& r
随机选择,多次执行,看结果的稳定性! L/ a/ D; q$ c- `: N

- E8 R: e" u: e6 b6 _* Y

    6 o5 x1 g: C" @/ ?; F/ v
  • 算法是否会终止
    " x/ L3 f1 b) s6 u+ Z7 @8 C: A
    此算法是收敛的,最终会终止. R" H7 @4 Y" e* ~% _
  • 算法的缺点
    % T' @% U. e6 E1 D9 C& z对非凸数据集表现不好,比如下面数据。
    - x7 a" w$ H# T2 z5 }/ f9 l: W8 c: S
1 G0 s& v0 D( _' N$ O
非凸数据集
0 u$ V3 w+ X7 z3 l, l+ ?参考文章+ V$ w9 U" ]& ^/ P! c

# u" b2 [0 p0 s' L; p. [- g- y, z6 v* v- H* o( r# g3 c

    ! W" k7 |) q0 S" ]% W/ U  R, p
  • http://blog.csdn.net/lwplwf/article/details/55506896
    ; u5 I$ u/ r4 K1 f* X5 g, f
  • http://www.jianshu.com/p/fc91fed8c77b
    2 s7 g) `6 D$ r7 J$ ^1 ~

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

扫一扫关注我们

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