kmeans算法原理和代码实现
时间: 2024-05-11 12:19:18 浏览: 85
K-means算法是一种基于聚类的机器学习算法,用于将一组数据点分成K个不同的簇。K-means算法的原理是将所有数据点分成K个簇,每个簇的中心点是所有该簇数据点的平均值,然后通过最小化所有数据点到其所在簇中心点的距离的平方和来优化簇的分配。
下面是K-means算法的代码实现(Python):
```python
import numpy as np
class KMeans:
def __init__(self, n_clusters=8, max_iter=300):
self.n_clusters = n_clusters
self.max_iter = max_iter
def fit(self, X):
self.centroids = X[np.random.choice(X.shape[0], self.n_clusters)]
for i in range(self.max_iter):
clusters = [[] for _ in range(self.n_clusters)]
for x in X:
distances = np.linalg.norm(self.centroids - x, axis=1)
cluster_idx = np.argmin(distances)
clusters[cluster_idx].append(x)
new_centroids = np.zeros_like(self.centroids)
for i, cluster in enumerate(clusters):
if len(cluster) == 0:
new_centroids[i] = self.centroids[i]
else:
new_centroids[i] = np.mean(cluster, axis=0)
if np.allclose(new_centroids, self.centroids):
break
self.centroids = new_centroids
def predict(self, X):
distances = np.linalg.norm(self.centroids - X[:, np.newaxis], axis=2)
return np.argmin(distances, axis=1)
```
这里的`fit()`方法用于训练模型,`predict()`方法用于预测数据点所属的簇。在`fit()`方法中,首先随机初始化K个簇中心点,然后使用循环迭代来优化簇的分配和簇中心点的位置。在每次循环迭代中,将所有数据点分配到最近的簇中心点,然后重新计算每个簇的中心点位置。如果新的中心点位置与旧的中心点位置相同,则停止迭代。在`predict()`方法中,使用已经训练好的模型来预测新的数据点所属的簇。
阅读全文