实现K均值聚类算法的Python代码
K均值聚类是一种常用的无监督学习算法,用于将数据点分成K个不同的组或类。下面是一个简单的Python实现,展示了如何使用K均值算法对数据进行聚类。
```python
import numpy as np
class KMeans:
def __init__(self, n_clusters, max_iter=300):
self.n_clusters = n_clusters
self.max_iter = max_iter
def fit(self, X):
self.centroids = X[np.random.choice(range(len(X)), self.n_clusters, replace=False)]
for _ in range(self.max_iter):
Assign labels to each data point based on centroids
labels = self._assign_labels(X)
Update centroids based on the mean of data points in each cluster
new_centroids = self._update_centroids(X, labels)
Check for convergence
if np.all(self.centroids == new_centroids):
break
self.centroids = new_centroids
return labels
def _assign_labels(self, X):
distances = np.sqrt(((X self.centroids[:, np.newaxis])**2).sum(axis=2))
return np.argmin(distances, axis=0)
def _update_centroids(self, X, labels):
new_centroids = np.zeros_like(self.centroids)
for i in range(self.n_clusters):
new_centroids[i] = X[labels == i].mean(axis=0)
return new_centroids
示例用法
if __name__ == "__main__":
生成示例数据
np.random.seed(42)
X = np.random.rand(100, 2)
定义K均值聚类器并拟合数据
kmeans = KMeans(n_clusters=3)
labels = kmeans.fit(X)
打印聚类中心点和对应的标签
print("Cluster centers:")
print(kmeans.centroids)
print("Labels:")
print(labels)
```
上面的代码定义了一个`KMeans`类,其中包含`fit`方法用于拟合数据,并在给定最大迭代次数内更新聚类中心点。 `_assign_labels` 方法用于将数据点分配给最近的聚类中心,而 `_update_centroids` 方法用于更新聚类中心点。
在示例用法中,我们生成了一些随机数据,并使用K均值聚类算法将数据分成3个不同的聚类。我们打印出聚类中心点和每个数据点的标签。
你可以根据自己的需求对这个代码进行修改和扩展,比如添加更复杂的数据预处理步骤或优化算法以提高性能。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。