kmeans聚类算法 代码
时间: 2024-04-02 17:28:56 浏览: 123
K-means聚类算法是一种常用的无监督学习算法,用于将数据集划分为K个不同的类别。它的基本思想是通过迭代的方式将数据点分配到K个簇中,使得每个数据点与所属簇的质心之间的距离最小化。
以下是K-means聚类算法的基本步骤:
1. 随机选择K个初始质心(簇中心)。
2. 将每个数据点分配到与其最近的质心所属的簇。
3. 更新每个簇的质心,计算每个簇中所有数据点的平均值作为新的质心。
4. 重复步骤2和步骤3,直到质心不再发生变化或达到预定的迭代次数。
K-means聚类算法的代码示例(Python):
```python
import numpy as np
def kmeans(data, k, max_iterations):
# 随机选择K个初始质心
centroids = data[np.random.choice(range(len(data)), k, replace=False)]
for _ in range(max_iterations):
# 分配数据点到最近的质心所属的簇
clusters = [[] for _ in range(k)]
for point in data:
distances = [np.linalg.norm(point - centroid) for centroid in centroids]
cluster_index = np.argmin(distances)
clusters[cluster_index].append(point)
# 更新每个簇的质心
new_centroids = []
for cluster in clusters:
new_centroids.append(np.mean(cluster, axis=0))
# 判断质心是否发生变化
if np.allclose(centroids, new_centroids):
break
centroids = new_centroids
return clusters, centroids
# 示例用法
data = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
k = 2
max_iterations = 10
clusters, centroids = kmeans(data, k, max_iterations)
print("Clusters:")
for i, cluster in enumerate(clusters):
print(f"Cluster {i+1}: {cluster}")
print("Centroids:")
for i, centroid in enumerate(centroids):
print(f"Centroid {i+1}: {centroid}")
```
阅读全文