写一个kmeans算法
时间: 2023-11-10 17:13:59 浏览: 76
好的,以下是一个简单的KMeans算法的Python代码实现:
```python
import numpy as np
from sklearn.datasets import make_blobs
# 生成模拟数据
X, y = make_blobs(n_samples=100, centers=3, n_features=2, random_state=42)
class KMeans:
def __init__(self, n_clusters=3, max_iter=100):
self.n_clusters = n_clusters
self.max_iter = max_iter
def fit(self, X):
# 随机初始化质心
self.centroids = X[np.random.choice(len(X), self.n_clusters, replace=False)]
for i in range(self.max_iter):
# 计算每个数据点到质心的距离,并将其分配到最近的簇中
distances = np.sqrt(np.sum((X - self.centroids[:, np.newaxis])**2, axis=2))
self.labels = np.argmin(distances, axis=0)
# 更新质心位置为所属簇的平均值
for j in range(self.n_clusters):
self.centroids[j] = np.mean(X[self.labels == j], axis=0)
def predict(self, X):
distances = np.sqrt(np.sum((X - self.centroids[:, np.newaxis])**2, axis=2))
labels = np.argmin(distances, axis=0)
return labels
```
这个KMeans类的fit方法接受一个二维的numpy数组作为输入数据X,并进行聚类。predict方法则接受一个新的数据集X,并使用已经训练好的质心来预测每个数据点所属的簇。
阅读全文