一、引言
聚类算法是无监督学习,只需要数据,而不需要标记结果,通过学习训练,用于发现共同的群体。本文将介绍几种常见的聚类算法,包括K-means、层次聚类和GMM高斯混合模型等。
1、聚类算法是什么
给定n个训练样本(未标记),如:{X1,X2,…,Xn},同时给定聚类的个数K。
目标:把比较“接近”的样本放到一个簇类(cluster)里,总共得到K个簇类(cluster)。
2、如何衡量样本距离
下面是几个最常用的距离计算公式:
(1)欧氏距离:
(2)曼哈顿距离
(3)核函数映射后距离
3、如何评价聚类好坏
类间距高,类内距低,通俗地说就是“抱团紧不紧,异族远不远”。
4、应用场景
(1)图片检索:图片内容相似度
(2)图片分割:图片像素相似度
(3)网页聚类:文本内容相似度
(4)社交网络聚类:(被)关注人群、兴趣
(5)电商用户聚类:点击/加车/购买商品、行为序列等
二、K-means算法
K-means算法是使用最普遍,最重要的聚类算法之一。
已知观测集,其中每个观测都是一个
D
-维实向量,k-平均聚类要把这个观测划分到k个集合中(k≤n),使得组内平方和(WCSS within-cluster sum of squares)最小。换句话说,它的目标是找到使得下式满足的聚类
。
1、算法原理
迭代收敛定义:
(1)聚类中心不在有变化
(2)每个样本到对应聚类中心的距离之和不再有很大变化
损失函数:
假定
为K个聚类中心,用
表示
是否属于聚类K,则损失函数定义如下:
最小化损失函数的过程是一个NP问题。上面的迭代,是收敛到局部最低点的过程。
2、优缺点
K-means算法优点:
(1)计算复杂度低,为O(Nmq),其中N是数据总量,m是类别(即k),q是迭代次数
(2)原理简单,实现容易,容易解释
(3)聚类效果不错
K-means算法缺点:
(1)对异常值(噪声)敏感,可以通过一些调整(如中心值不直接取均值,而是找均值最近的样本点代替)
(2)需要提前确定K值(提前确定多少类)
(3)分类结果依赖于分类中心的初始化(可以通过进行多次K-means取最优来解决)
(4)属于“硬聚类”,每个样本只能有一个类别。其他的一些聚类方法(GMM或者模糊K-means允许“软聚类”)
(5)对于团状的数据点集区分度好,对于带状(环绕)等非凸形状不太好。(用谱聚类或做特征映射)
3、改进算法
如:K-means++等
4、动手用python实现K-means算法
样本数据:
1.658985 4.285136
-3.453687 3.424321
4.838138 -1.151539
-5.379713 -3.362104
0.972564 2.924086
-3.567919 1.531611
0.450614 -3.302219
-3.487105 -1.724432
2.668759 1.594842
-3.156485 3.191137
3.165506 -3.999838
-2.786837 -3.099354
4.208187 2.984927
-2.123337 2.943366
0.704199 -0.479481
-0.392370 -3.963704
2.831667 1.574018
-0.790153 3.343144
2.943496 -3.357075
-3.195883 -2.283926
2.336445 2.875106
-1.786345 2.554248
2.190101 -1.906020
-3.403367 -2.778288
1.778124 3.880832
-1.688346 2.230267
2.592976 -2.054368
-4.007257 -3.207066
2.257734 3.387564
-2.679011 0.785119
0.939512 -4.023563
-3.674424 -2.261084
2.046259 2.735279
-3.189470 1.780269
4.372646 -0.822248
-2.579316 -3.497576
1.889034 5.190400
-0.798747 2.185588
2.836520 -2.658556
-3.837877 -3.253815
2.096701 3.886007
-2.709034 2.923887
3.367037 -3.184789
-2.121479 -4.232586
2.329546 3.179764
-3.284816 3.273099
3.091414 -3.815232
-3.762093 -2.432191
3.542056 2.778832
-1.736822 4.241041
2.127073 -2.983680
-4.323818 -3.938116
3.792121 5.135768
-4.786473 3.358547
2.624081 -3.260715
-4.009299 -2.978115
2.493525 1.963710
-2.513661 2.642162
1.864375 -3.176309
-3.171184 -3.572452
2.894220 2.489128
-2.562539 2.884438
3.491078 -3.947487
-2.565729 -2.012114
3.332948 3.983