k-means聚类算法在线学习源码
时间: 2024-01-22 14:00:47 浏览: 120
基于大数据K-means聚类算法的在线学习行为路径的研究
K-means聚类算法是一种常用的无监督学习算法,用于将一组数据分成不同的簇。它通过计算数据点与各个簇中心之间的距离,并将数据点分配到距离最近的簇中心,不断地更新簇中心的位置,直到达到收敛。
针对在线学习的需求,可以参考以下实现思路:
1. 初始化簇中心:随机选择k个数据点作为初始簇中心。
2. 随机选择一个新的数据点,并计算该数据点与所有簇中心的距离。
3. 将新的数据点分配到距离最近的簇中心。
4. 更新簇中心的位置:对于每个簇,计算该簇中所有数据点的平均值,将该平均值作为新的簇中心。
5. 重复第2-4步,直到达到收敛条件,如达到指定的迭代次数或簇中心的变化小于阈值。
基于以上思路,可以使用Python编写在线学习的K-means聚类算法的源码。具体实现如下:
```python
import numpy as np
class KMeans:
def __init__(self, k, max_iter=100, tol=1e-4):
self.k = k
self.max_iter = max_iter
self.tol = tol
def fit(self, X):
# 初始化簇中心
self.centroids = X[np.random.choice(range(X.shape[0]), self.k, replace=False)]
for _ in range(self.max_iter):
# 分配数据点到簇中心
labels = self.assign_labels(X)
# 更新簇中心的位置
new_centroids = self.update_centroids(X, labels)
# 判断簇中心的变化是否小于阈值
if np.linalg.norm(new_centroids - self.centroids) < self.tol:
break
self.centroids = new_centroids
def assign_labels(self, X):
distances = np.sqrt(((X[:, np.newaxis] - self.centroids) ** 2).sum(axis=2))
return np.argmin(distances, axis=1)
def update_centroids(self, X, labels):
new_centroids = np.zeros_like(self.centroids)
for i in range(self.k):
new_centroids[i] = X[labels == i].mean(axis=0)
return new_centroids
```
以上是一个简单的在线学习的K-means聚类算法的源码,可以根据实际需求进行适当修改和拓展,例如添加更复杂的初始簇中心选择方法或调整更新簇中心的策略。
阅读全文