Python机器学习之Kmeans基础算法
Kmeans是一种常用的聚类算法,它将数据集分成K个簇,每个簇包含最接近它们的点。在本攻略中,我们将介绍如何使用Python实现Kmeans算法,包括算法的基本原理、实现步骤和示例说明。
Kmeans算法基本原理
Kmeans算法的基本原理是将数据集分成K个簇,每个簇包含最接近它们的点。算法的步骤如下:
- 随机选择K个点作为簇的中心点。
- 将每个点分配到最近的簇中。
- 计算每个簇的中心点。
- 重复步骤2和3,直到簇不再发生变化或达到最大迭代次数。
Kmeans算法实现步骤
Kmeans算法的实现步骤如下:
- 随机选择K个点作为簇的中心点。
- 计算每个点到每个簇中心点的距离,将每个点分配到最近的中。
- 计算每个簇的中心点。
- 重复步骤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
类,该类包含fit
和predict
方法。fit
方法用于训练模型,predict
方法用于预测数据点所属的簇。
我们首先定义了一个KMeans
类的构造函数,该函数包含两个参数:k
表示簇的数量,max_iter
表示最大迭代次数。然后,我们定义了fit
方法,该方法使用随机选择的K个点作为簇的中心点,然后计算每个点到每个簇中心点的距离,将每个点分配到最近的簇中。接着,我们计算每个簇的中心点,并重复步骤2和3,直到簇不再发生变化或达到最大迭代次数。最后,我们定义了predict
方法,该方法使用训练好的模型预测数据点所属的簇。
我们使用两个示例说明了如何使用Kmeans算法。在示例1中,我们使用Kmeans算法将一个二维数据集分成两个簇。在示例2中,我们使用Kmeans算法将一个随机生成的数据集分成四个簇。
结论
本攻略介绍了如何使用Python实现Kmeans算法,包括算法的基本原理、实现步骤和示例说明。这些示例代码帮助初学者更好地理解如何使用Python实现Kmeans算法,并将其应用于不同的问题。