文本聚类kmeans 源码实现
时间: 2023-07-03 18:04:11 浏览: 70
以下是基于Python的K-Means聚类算法的实现代码:
```python
import numpy as np
class KMeans:
def __init__(self, k=2, max_iterations=500):
self.k = k
self.max_iterations = max_iterations
def fit(self, data):
self.centroids = []
for i in range(self.k):
self.centroids.append(data[np.random.randint(0, len(data) - 1)])
for i in range(self.max_iterations):
clusters = [[] for _ in range(self.k)]
for point in data:
distances = [np.linalg.norm(point - centroid) for centroid in self.centroids]
cluster_index = np.argmin(distances)
clusters[cluster_index].append(point)
prev_centroids = self.centroids.copy()
for i in range(self.k):
self.centroids[i] = np.average(clusters[i], axis=0)
optimized = True
for i in range(self.k):
if not np.array_equal(self.centroids[i], prev_centroids[i]):
optimized = False
if optimized:
break
def predict(self, data):
predictions = []
for point in data:
distances = [np.linalg.norm(point - centroid) for centroid in self.centroids]
cluster_index = np.argmin(distances)
predictions.append(cluster_index)
return predictions
```
这个实现中,我们使用了numpy库来处理数据和计算矩阵运算,同时也使用了Python在列表操作方面的优点。在初始化时,我们设定了聚类数k和最大迭代次数max_iterations。在训练过程中,我们随机初始化了k个中心点,并且使用欧几里得距离度量来计算每个点到每个中心点的距离。使用最小距离法来将每个点分配到对应的簇中。然后,我们重新计算每个簇的中心点,并测试是否收敛。如果收敛,则停止迭代。最后,predict方法可以用来对新数据进行预测,返回的是数据所属的簇索引。
阅读全文