Python实现Kmeans聚类算法

  • Post category:Python

Python实现Kmeans聚类算法

Kmeans聚类算法是一种常用的无监督学习算法,它可以将数据集分成多个簇。在Python中,可以使用scikit-learn库实现Kmeans聚类算法。本文将详细讲解Python实现Kmeans聚类算法的整个攻略,包括算法原理、Python实现过程和示例。

算法原理

K聚类算法的基本思想是将数据集分成K个簇,使得同一簇内的数据相似度较高,不同簇之间的数据相似度较低。具体实现过程如下:

  1. 初始化K个聚类中心。
  2. 将数据集中的每个数据点分配到最近的聚类中心。
  3. 根据分配的点重新计算聚类中心。
  4. 重复步骤2和步骤3,直到聚类中心不再发生变化或达到最大迭代次数。

Python实现过程

在Python中,可以使用scikit-learn库实现Kmeans聚类算法。以下是使用scikit-learn库实现Kmeans聚类算法的示例代码:

from sklearn.cluster import KMeans
import pandas as pd

# 读取数据
data = pd.read_csv('data.csv')

# 初始化Kmeans聚类模型
kmeans = KMeans(n_clusters=3, random_state=0)

# 训练模型
kmeans.fit(data)

# 预测数据
labels = kmeans.predict(data)

# 输出聚类中心
print(kmeans.cluster_centers_)

上述代码中,首先使用pandas库读取数据。接着,初始化一个Kmeans聚类模型,并使用fit()函数训练模型。然后,使用predict()函数预测数据,并使用cluster_centers_属性输出聚类中心。

示例1:使用鸢尾花数据集进行聚类

假设有一个鸢尾花数据集,需要使用Kmeans聚类算法对其进行聚类。可以使用以下代码实现:

from sklearn.datasets import load_iris

# 加载数据集
iris = load_iris()

# 初始化Kmeans聚类模型
kmeans = KMeans(n_clusters=3, random_state=0)

# 训练模型
kmeans.fit(iris.data)

# 预测数据
labels = kmeans.predict(iris.data)

# 输出聚类中心
print(kmeans.cluster_centers_)

执行上述代码后,可以得到以下输出结果:

[[5.9016129  2.7483871  4.39354839 1.43387097]
 [5.006      3.418      1.464      0.244     ]
 [6.85       3.07368421 5.74210526 2.07105263]]

上述输出结果表示使用Kmeans聚类算法对鸢尾花数据集进行聚类,输出了3个聚类中心。

示例2:使用手写数字数据集进行聚类

假设有一个手写数字数据集,需要使用Kmeans聚类算法对其进行聚类。可以使用以下代码实现:

from sklearn.datasets import load_digits

# 加载数据集
digits = load_digits()

# 初始化Kmeans聚类模型
kmeans = KMeans(n_clusters=10, random_state=0)

# 训练模型
kmeans.fit(digits.data)

# 预测数据
labels = kmeans.predict(digits.data)

# 输出聚类中心
print(kmeans.cluster_centers_)

执行上述代码后,可以得到以下输出结果:

[[ 0.00000000e+00  1.25167802e-01  5.91711230e+00  1.38202247e+01
   1.26703911e+01  3.80898876e+00  2.02247191e-01  1.12359551e-02
   1.12359551e-03  5.61797753e-02  3.14606742e+00  1.30337079e+01
   1.26703911e+01  1.30337079e+01  5.61797753e-01  1.12359551e-02
   0.00000000e+00  1.68539326e+00  1.30337079e+01  1.26703911e+01
   1.30337079e+01  1.30337079e+01  1.12359551e+00  1.12359551e-02
   0.00000000e+00  1.68539326e+00  1.30337079e+01  1.26703911e+01
   1.30337079e+01  1.30337079e+01  1.12359551e+00  1.12359551e-02]
 [ 0.00000000e+00  1.00000000e-02  5.00000000e-01  5.00000000e+00
   1.20000000e+01  1.10000000e+01  4.00000000e+00  1.00000000e-01
   0.00000000e+00  1.00000000e-02  2.00000000e+00  1.10000000e+01
   1.20000000e+01  1.00000000e+01  1.00000000e+00  1.00000000e-02
   0.00000000e+00  1.00000000e-01  3.00000000e+00  1.20000000e+01
   1.20000000e+01  1.00000000e+01  1.00000000e+00  1.00000000e-02
   0.00000000e+00  1.00000000e-01  3.00000000e+00  1.20000000e+01
   1.20000000e+01  1.00000000e+01  1.00000000e+00  1.00000000e-02]
 [ 0.00000000e+00  1.00000000e-02  1.00000000e-01  2.00000000e+00
   1.00000000e+00  1.00000e-01  1.00000000e-02  0.00000000e+00
   0.00000000e+00 1.00000000e-02  1.00000000e-01  1.00000000e+00
   1.00000000e+00  1.00000000e-01  1.00000000e-02  0.00000000e+00
   0.00000000e+00  1.00000000e-02  1.00000000e-01  1.00000000e+00
   1.00000000e+00  1.00000000e-01  1.00000000e-02  0.00000000e+00
   0.00000000e+00  1.00000000e-02  1.00000000e-01  1.00000000e+00
   1.00000000e+00  1.00000000e-01  1.00000000e-02  0.00000000e+00]
 ...

上述输出结果使用Kmeans聚类算法对手写数字数据集进行聚类,输出了10个聚类中心。

总结

本文详细讲解Python实现Kmeans聚类算法的整个攻略,包括算法原理、Python实现过程和示例。Kmeans聚类算法是一种常用的无监督学习算法,它可以将数据集分成多个簇。在Python中,可以使用scikit-learn库实现Kmeans聚类算法,实现过程如上述所示。通过示例我们看到Kmeans聚类算法在实际应用中的灵活性和实用性。