使用Python语言手写K均值算法。
时间: 2024-02-27 08:58:48 浏览: 14
好的,下面是手写K均值算法的Python实现:
```python
import numpy as np
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):
distances = np.sqrt(((X - self.centroids[:, np.newaxis])**2).sum(axis=2))
self.labels = np.argmin(distances, axis=0)
for j in range(self.k):
self.centroids[j] = X[self.labels == j].mean(axis=0)
def predict(self, X):
distances = np.sqrt(((X - self.centroids[:, np.newaxis])**2).sum(axis=2))
return np.argmin(distances, axis=0)
```
使用方法如下:
```python
# 生成随机数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 实例化KMeans类
kmeans = KMeans(k=2, max_iter=100)
# 执行聚类
kmeans.fit(X)
# 输出聚类结果
print(kmeans.labels)
# 预测新样本的类别
new_X = np.array([[0, 0], [2, 2]])
print(kmeans.predict(new_X))
```
其中,`X`是输入数据,`k`是聚类的簇数,`max_iter`是最大迭代次数。`fit`方法执行聚类,`predict`方法用于预测新样本的类别。