初级
第13章 无监督学习概论 - 实现K-means聚类
未完成
初级参考
完整示例代码供参考,建议自己理解后重新输入
import numpy as np
class KMeans:
def __init__(self, n_clusters=3, max_iter=100, random_state=None):
self.n_clusters = n_clusters
self.max_iter = max_iter
self.random_state = random_state
self.centroids = None
self.labels = None
def fit(self, X):
if self.random_state is not None:
np.random.seed(self.random_state)
n_samples = X.shape[0]
idx = np.random.choice(n_samples, self.n_clusters, replace=False)
self.centroids = X[idx]
for _ in range(self.max_iter):
distances = np.zeros((n_samples, self.n_clusters))
for k in range(self.n_clusters):
distances[:, k] = np.linalg.norm(X - self.centroids[k], axis=1)
self.labels = np.argmin(distances, axis=1)
new_centroids = np.zeros_like(self.centroids)
for k in range(self.n_clusters):
if np.sum(self.labels == k) > 0:
new_centroids[k] = X[self.labels == k].mean(axis=0)
else:
new_centroids[k] = self.centroids[k]
if np.allclose(self.centroids, new_centroids):
break
self.centroids = new_centroids
return self
def predict(self, X):
distances = np.zeros((X.shape[0], self.n_clusters))
for k in range(self.n_clusters):
distances[:, k] = np.linalg.norm(X - self.centroids[k], axis=1)
return np.argmin(distances, axis=1)
👑
升级 VIP
解锁全部题目,畅通无阻地学习
- ✓ 解锁全部训练包所有题目
- ✓ 查看完整参考代码和提示
- ✓ 浏览器内直接运行 Python 代码
- ✓ 自动批改 + 进度追踪
30天
¥18
1年
¥99
2年
¥158
3年
¥199