先来看下Clustering Algorithms聚类算法的分类:
1.Partitioning:
Construct k partitions and iteratively update the partitions
分区 :构造k个分区并迭代地更新这些分区
(1)k-means(k-均值)
(2) k-medoids(k-中心点)
2.Hierarchical:(层次聚类)
Create a hierarchy of clusters (dendrogram 树状图)
(1)Agglomerative clustering (bottom-up)
(2)Conglomerative clustering (top-down)
3.Graph-based clustering:
Graph-cut algorithms (Spectral Clustering)
4.Model-based clustering
Mixture of Gaussians
5.Other types:
(1)Non-parametric Bayesian (Latent Dirichlet Allocation)
(2)Expectation Maximisation (EM) algorithm
(3)and many more …
k-means(k-均值)
定义
聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,是无监督学习
目的
给无标签的数据 (或者称为 instance) 分类
宏观来说这个算法是用来干什么的:
- 通过 训练数据集(train dataset) 和 k-means算法 找到每个分类的中心点(cluster centre)
- 在测试或应用时,计算 测试数据点 或 应用数据点(instance) 距离各个分类中心点的距离
- 测试数据或应用数据 距离哪个点最近,就被分到哪一类去
所以,这个算法要做的就是怎么通过训练数据集找到这些分类的中心点
原理 --找类中心(cluster centre)
我们要做的就是最小化下面的那个公式
公式的意义: 假如所有的点都被分到了正确的类中,那么所有的点到他们所归属的类中心的距离之和是最小的
步骤
翻译:
- Input
- cluster 的个数k
- 含有N 个instances的数据集 S = {x1, …, xN}, 每个instance都是 d 维 的实数向量(xi ∈ Rd),代表instance的d个特征(features)
- 从数据集中随机取 k个instances(用于初始化cluster centres,显然每个instance 代表一个cluster centre)
- 将其余的instances分布在与其最近的cluster centre (一个数据一个数据的来迭代)
- 计算每个cluster的平均值
- 在第2步,第3步重复,直到收敛
k-means 算法的弊端及解决方案
-
结果非常依赖初始化时随机选择,或者说 受初始化时选择k个点的影响特别大
-
可能某个分类被圈在一个很小的局部范围,并不是全局最优
解决方案:用不同的初始化数据(k个数据),重复聚类过程多次,并选择最佳的最终聚类。那怎么评估聚类的好坏呢?例如,评估维度有:(下一个模块有详细讲解)
– 1. smallest number of iterations before convergence
在聚类中心值收敛前,使用了最少迭代次数
– largest total distance between the final cluster means
最终的的cluster means值相加,值最大,也就是说聚类中心点之间的距离越大越好 -
离群值对平均值的影响非常大
-
聚类中心(means)不是集群中的点
解决方案:从每个分类中,分别选择其中数据作为初始化聚类中心
k-means 聚类算法衡量指标
(聚类效果的评价方式大体上可分为性能度量和距离计算两类。)
1.purity(纯度)
栗子:
2.NMI : Normalised Mutual Information (归一化互信息)
3.Rand index (RI)