Python机器学习算法之k均值聚类(k-means)

  • Post category:Python

Python机器学习算法之k均值聚类(k-means)

在机器学习中,k均值聚类(k-means)是一种常见的无监督学习算法,它可以将数据集划分成k个簇。本文,我们将讲解k均值聚类的原理、Python实现以及两个示例说明。

k均值聚类原理

k均值聚类是一种基于距离的聚类算法,它的核心思想是将数据集划分成k个簇,使每个数据点都属于离它最近的簇。在k均值聚类中,我们需要考虑以下几个问题:

  1. 如何初始化簇的中心点?
  2. 如何计算数据点和簇中心点之间的距离?
  3. 如何更新簇的中心点?

在k均值聚类中,我们通常使用随机初始化的方式来初始化簇的中心点。在计算数据点和簇中心点之间的距离时,我们通常使用欧几里得距离或者曼哈顿距离。在更新簇的中心点时,我们通将簇中所有数据点的坐标的平均值作为新的簇中心点。

Python实现k均值聚类

在Python中,我们可以使用sklearn库来实现k均值聚类。下面是一个简单的示例代码:

from sklearn.cluster import KMeans
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0],
              [4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)

print(kmeans.labels_)
print(kmeans.predict([[0, 0], [4, 4]]))
print(kmeans.cluster_centers_)

在这个代码中,我们使用了KMeans类来实现k均值聚类。我们使用了fit函数来拟合数据,使用了labels_属性来获取每个数据点所属的簇,使用了predict函数来预测新的数据点所属的簇,使用了cluster_centers_属性来获取每个簇的中心点。

示例说明

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

在这个示例中,我们将使用k均值聚类对鸢尾花数据集进行聚类。假设我们有一个鸢尾花数据集,我们的目标是将它划分成k个簇。下面是Python代码:

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans

iris = load_iris()
X = iris.data
y = iris.target

kmeans = KMeans(n_clusters=3, random_state=0).fit(X)

print(kmeans.labels_)

在这个代码中,我们使用了load_iris函数来加载鸢尾花数据集,使用了KMeans类来实现k均值聚类。我们将数据集划分成3个簇,使用fit函数来拟合数据,使用labels_属性来获取每个数据点所属的簇。

输出结果如下:

[1 2 2 2 1 1 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2
 1 1 2 1 1 2 1 1 1 2 1 1 2 1 1 0 0 0 2 0 0 0 2 0 2 0 2 0 2 0 0 2 0 2 0 2 2
 0 0 0 2 0 2 0 2 2 2 0 0 2 2 0 2 0 0 2 2 2 0 2 2 2 0 2 0 2 2 0 2 2 2 0 2 2
 2 0]

这个结果表示我们成功地将鸢尾花数据集划分成了3个簇。

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

在这个示例中,我们将使用k均值聚类对手写数字数据集进行聚类。假设我们有一个手写数字数据集,我们的目标是将它划分成k个簇。下面是Python代码:

from sklearn.datasets import load_digits
from sklearn.cluster import KMeans

digits = load_digits()
X = digits.data
y = digits.target

kmeans = KMeans(n_clusters=10, random_state=0).fit(X)

print(kmeans.labels_)

在这个代码中,我们使用了load_digits函数来加载手写数字数据集,使用了KMeans类来实现k均值聚类。我们将数据集划分成10个簇,使用fit函数来拟合数据,使用labels_属性来获取每个数据点所属的簇。

输出结果如下:

[8 0 0 ... 0 3 3]

这个结果表示我们成功地将手写数字数据集划分成了10个簇。

总结

本文介绍了k均值聚类的原理、Python实现以及两个示例说明。k均值聚类是一种基于距离的聚类算法,它的核心思想是将数据集划分成k个簇,使得每个数据点都属于离它最近的簇。在Python中,我们可以使用sklearn库来实现k均值聚类。我们可以使用KMeans类来实现k均值聚类,使用fit函数来拟合数据,使用labels_属性来获取每个数据点所属的簇。我们可以使用k均值聚类对鸢尾花数据集和手写数字数据集进行聚类。