匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

「数据挖掘」Python实现K-means算法,实现聚类分析

数据挖掘是运用统计学、机器学习和数据库技术的一种数据分析方法,是从大量数据中自动或半自动地提取出有价值的信息。而聚类分析则是数据挖掘的一种重要手段,它可以将数据分为若干个簇,每个簇内的数据具有相似性,不同簇之间的数据差异较大。其中K-means算法是一种经典的聚类算法之一,本文将介绍如何使用Python实现K-means算法并进行聚类分析。

1. K-means算法简介

K-means算法是一种基于距离的聚类算法,其核心思想是将数据样本分为K个簇,每个簇的中心点称为聚类中心。该算法通过最小化簇内样本点与其所属聚类中心的距离之和,来实现聚类分析。K-means算法的基本步骤如下:

1. 随机初始化K个聚类中心。

2. 将每个数据样本点分配到距离其最近的聚类中心所在的簇中。

3. 计算每个簇的中心点,并将其作为新的聚类中心。

4. 重复执行步骤2和步骤3,直到簇中心不再发生变化或达到预设的迭代次数。

2. Python实现K-means算法

在Python中,我们可以使用numpy和matplotlib库来实现K-means算法并进行聚类分析。下面是代码实现:

import numpy as np
import matplotlib.pyplot as plt

# 随机生成数据样本
np.random.seed(10)
data = np.random.randn(200, 2)

# 初始化K个聚类中心
K = 3
centers = np.random.randn(K, 2)

# 定义簇的分配函数
def assign_clusters(data, centers):
    distances = np.sqrt(((data - centers[:, np.newaxis])**2).sum(axis=2))
    return np.argmin(distances, axis=0)

# 定义中心点更新函数
def update_centers(data, assignments, centers):
    return np.array([data[assignments==k].mean(axis=0) for k in range(centers.shape[0])])

# 迭代更新聚类中心
for i in range(10):
    assignments = assign_clusters(data, centers)
    centers = update_centers(data, assignments, centers)

# 可视化显示聚类结果
colors = ['r', 'g', 'b']
for k in range(K):
    plt.scatter(data[assignments==k][:, 0], data[assignments==k][:, 1], c=colors[k])
    plt.scatter(centers[k][0], centers[k][1], marker='x', s=200, linewidths=3, c='k')
plt.show()

在代码中,我们首先随机生成了一个包含200个二维数据样本的数据集。然后我们通过numpy库来实现K-means算法的核心步骤,包括随机初始化聚类中心、定义簇的分配函数和中心点更新函数、以及迭代更新聚类中心。最后我们使用matplotlib库来可视化显示聚类结果,其中不同颜色代表不同簇,黑色的X表示聚类中心。

3. 总结

本文介绍了数据挖掘中的聚类分析及其经典算法K-means的基本原理,并通过Python代码实现了K-means算法的主要步骤,最终通过可视化展示了聚类分析的结果。通过本文的学习,读者们可以对聚类算法的原理及其实现方法有更深入的了解,同时也可以将这种技术应用到实际的数据挖掘中。