k-means 聚类算法与Python实现代码

1. k-means聚类算法介绍

k-means聚类算法是一种多维空间数据分类的非监督学习算法,可用于将数据集划分成k个不同的组。其主要思想是将n个数据点分为k个聚类,使得每个数据点都属于与其最近的聚类,且每个聚类的中心点(质心)位于该聚类中所有数据点的平均值处。

k-means算法的流程如下:

1.初始化k个聚类中心(随机或指定)

2.将剩余的数据点分配到距离最近的聚类中心中

3.重新计算每个聚类的中心点

4.重复以上步骤,直到聚类不再发生变化,或达到预设的最大迭代次数

2. k-means聚类的Python实现

在Python中,我们可以使用scikit-learn库中的KMeans模块来实现k-means聚类算法。首先需要导入相关库:

from sklearn.cluster import KMeans

import numpy as np

import matplotlib.pyplot as plt

接下来,我们可以生成一些随机的数据点,并用KMeans算法对其进行聚类:

#生成随机数据

data = np.random.rand(100,2)

#使用k-means对数据进行聚类

kmeans = KMeans(n_clusters=4)

kmeans.fit(data)

我们可以使用以下代码可视化聚类结果:

#获取聚类中心

centers = kmeans.cluster_centers_

#获取每个数据点的聚类标签

labels = kmeans.labels_

#可视化聚类结果

plt.scatter(data[:, 0], data[:, 1],c=labels)

plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, linewidths=3,color='r')

plt.show()

运行结果如下图所示:

3. k-means聚类算法优化

虽然k-means算法在处理大数据集时表现出了良好的性能,但是其易受初始聚类中心的选择影响,可能导致结果较差。为了尽量避免这种情况,可以采用多次运行算法并取平均值的方式来优化算法。我们可以通过以下代码来执行这个过程:

#批量计算聚类效果

cost = []

for i in range(1,20):

kmeans = KMeans(n_clusters=4)

kmeans.fit(data)

cost.append(kmeans.inertia_)

plt.plot(range(1,20),cost)

plt.show()

上述代码将k-means算法应用于数据,并计算了聚类中心数目从1到19时的SSE(误差平方和)值。我们可以通过画出SSE-聚类数目曲线来选择合适的聚类数目。运行结果如下图所示:

4. k-means聚类算法的应用场景

k-means聚类算法可以应用于有无监督学习的情境,如图像分割、文本分类、客户细分等场景。例如,在客户细分领域,我们可以使用k-means算法将市场销售数据分为不同的群体,以便公司能够更好地了解各个群体的需求和喜好,从而更好地开展营销活动。

5. 总结

本文介绍了k-means算法的原理和Python实现方法,并对算法进行了优化,希望读者对该算法有更深的认识。在实际应用中,一定要根据具体情况灵活选择聚类数目和数据生成方式,以获得更好的聚类效果。

后端开发标签