实现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个不同的聚类。我们打印出聚类中心点和每个数据点的标签。

你可以根据自己的需求对这个代码进行修改和扩展,比如添加更复杂的数据预处理步骤或优化算法以提高性能。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

最近发表

兮淼

这家伙太懒。。。

  • 暂无未发布任何投稿。