Python机器学习之Kmeans基础算法

  • Post category:Python

Python机器学习之Kmeans基础算法

Kmeans是一种常用的聚类算法,它将数据集分成K个簇,每个簇包含最接近它们的点。在本攻略中,我们将介绍如何使用Python实现Kmeans算法,包括算法的基本原理、实现步骤和示例说明。

Kmeans算法基本原理

Kmeans算法的基本原理是将数据集分成K个簇,每个簇包含最接近它们的点。算法的步骤如下:

  1. 随机选择K个点作为簇的中心点。
  2. 将每个点分配到最近的簇中。
  3. 计算每个簇的中心点。
  4. 重复步骤2和3,直到簇不再发生变化或达到最大迭代次数。

Kmeans算法实现步骤

Kmeans算法的实现步骤如下:

  1. 随机选择K个点作为簇的中心点。
  2. 计算每个点到每个簇中心点的距离,将每个点分配到最近的中。
  3. 计算每个簇的中心点。
  4. 重复步骤2和3,直到簇不再发生变化或达到最大迭代次数。

Python实现Kmeans算法

以下是使用Python实现Kmeans算法的示例代码:

import numpy as np
import matplotlib.pyplot as plt

class KMeans:
    def __init__(self, k=2, max_iter=100):
        self.k = k
        self.max_iter = max_iter

    def fit(self, X):
        self.centroids = X[np.random.choice(X.shape[0], self.k, replace=False)]
        for i in range(self.max_iter):
            clusters = [[] for _ in range(self.k)]
            for x in X:
                distances = [np.linalg.norm(x - c) for c in self.centroids]
                cluster = np.argmin(distances)
                clusters[cluster].append(x)
            prev_centroids = self.centroids
            self.centroids = [np.mean(cluster, axis=0) for cluster in clusters]
            if np.all(prev_centroids == self.centroids):
                break

    def predict(self, X):
        distances = [np.linalg.norm(X - c, axis=1) for c in self.centroids]
        return np.argmin(distances, axis=0)

# 示例1
X = np.array([[1, 2], [1, 4], [1, 0],
              [4, 2], [4, 4], [4, 0]])
kmeans = KMeans(k=2)
kmeans.fit(X)
labels = kmeans.predict(X)
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(kmeans.centroids[:, 0], kmeans.centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()

# 示例2
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=1000, centers=4, random_state=42)
kmeans = KMeans(k=4)
kmeans.fit(X)
labels = kmeans.predict(X)
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(kmeans.centroids[:, 0], kmeans.centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()

在这个示例中,我们定义了一个KMeans类,该类包含fitpredict方法。fit方法用于训练模型,predict方法用于预测数据点所属的簇。

我们首先定义了一个KMeans类的构造函数,该函数包含两个参数:k表示簇的数量,max_iter表示最大迭代次数。然后,我们定义了fit方法,该方法使用随机选择的K个点作为簇的中心点,然后计算每个点到每个簇中心点的距离,将每个点分配到最近的簇中。接着,我们计算每个簇的中心点,并重复步骤2和3,直到簇不再发生变化或达到最大迭代次数。最后,我们定义了predict方法,该方法使用训练好的模型预测数据点所属的簇。

我们使用两个示例说明了如何使用Kmeans算法。在示例1中,我们使用Kmeans算法将一个二维数据集分成两个簇。在示例2中,我们使用Kmeans算法将一个随机生成的数据集分成四个簇。

结论

本攻略介绍了如何使用Python实现Kmeans算法,包括算法的基本原理、实现步骤和示例说明。这些示例代码帮助初学者更好地理解如何使用Python实现Kmeans算法,并将其应用于不同的问题。