6.1 K-Means聚类算法
6.1.1 聚类
聚类(Clustering)是指将不同的对象划分成由多个对象组成的多个类的过程。由聚类产生的数据分组,同一组内的对象具有相似性,不同组的对象具有相异性。聚类待划分的类别未知,即训练数据没有标签。聚类属于非监督学习。
簇(cluster)是由距离邻近的对象组合而成的集合。聚类的最终目标是获得紧凑、独立的簇集合。一般采用相似度作为聚类的依据,两个对象的距离越近,其相似度就越大。
按照簇的定义和聚类的方式,聚类大致分为以下几种:K-Means为代表的簇中心聚类、基于连通性的层次聚类、以EM算法为代表的概率分布聚类、以DBSCAN为代表的基于网格密度的聚类,以及高斯混合聚类等。
6.1.2 K-Means聚类
K-Means聚类算法也称为K均值聚类算法,是典型的聚类算法。对于给定的数据集和需要划分的类数k,算法根据距离函数进行迭代处理,动态地把数据划分成k个簇(即类别),直到收敛为止。簇中心(cluster center)也称为聚类中心。
K-Means聚类的优点是算法简单、运算速度快,即便数据集很大计算起来也便捷。不足之处是如果数据集较大,容易获得局部最优的分类结果。而且所产生的类的大小相近,对噪声数据也比较敏感。
聚类的运算流程:
python
随机选择 k个数据点 -> 起始簇中心
While数据点的分配结果发生改变:
for数据集中的每个数据点p:
for 循环访问每个簇中心c:
computer_distance(p,c)
将数据点p分配到最近的簇
for 每一个簇:
簇中心更新为簇内数据点的均值
聚类是一个反复迭代的过程,理想的终止条件是簇的分配和个簇中心不再改变。此外,也可以设置循环次数、变化误差作为终止条件。
聚类的运算流程可以简单示意为下图:
上图中在第三次迭代之后,分配方案和簇中心保持不变,算法结束
6.1.3聚类算法的性能评估
1.常见的聚类评价方法
大致3类:外部有效性评价、内部有效性评价和相对评价法。
- 外部评价反映聚类结果的整体效果,常用的指标有F-measure指数,Rand指数和Jaccard系数等。
- 内部评价是利用数据集的内部特征来评价,包括Dunn指数、轮廓系数等指标。
- 相对评价法选定某个评价指标,然后为聚类算法设置不同的参数进行测试。根据测试结果选取最优的算法参数和聚类模式等,例如改进的Dunn指数等。
2.K-Means目标函数
假设数据集X包含n个数据点,需要划分到k个类。类中心为用集合U表示。聚类后所有数据点到各自聚类中心的差的平方和为聚类平方和用J表示,J值为:
聚类的目标就是使J值最小化。 如果在某次迭代前后,J值没有収生变化,则说明 簇的分配丌再収生变化,算法已经收敛。
6.2.4 代码示例(Python)
以下是一个使用 Python 实现 K-Means 聚类算法的简单示例:
python
import numpy as np
def kmeans(data, k, max_iterations=100):
n_samples, n_features = data.shape
centroids = data[np.random.choice(n_samples, k, replace=False)]
for _ in range(max_iterations):
distances = np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)
labels = np.argmin(distances, axis=1)
new_centroids = np.array([data[labels == i].mean(axis=0) for i in range(k)])
if np.allclose(centroids, new_centroids):
break
centroids = new_centroids
return labels, centroids
你可以使用以下方式调用这个函数:
python
data = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
labels, centroids = kmeans(data, k=2)
print("Labels:", labels)
print("Centroids:", centroids)
在这个示例中,我们首先定义了一个kmeans
函数,它接受数据集data
、聚类数k
和最大迭代次数作为参数。函数首先随机选择初始聚类中心,然后通过不断迭代分配样本和更新聚类中心的过程,直到聚类中心不再发生变化或达到最大迭代次数为止。最后,函数返回每个样本的聚类标签和最终的聚类中心。这只是一个简单的示例,实际应用中可能需要根据具体问题进行调整和优化。