k均值聚类算法python
时间: 2023-07-06 22:34:40 浏览: 37
K均值聚类是一种无监督学习算法,用于将数据集分成K个类别。下面是一个简单的Python实现:
```python
import numpy as np
import matplotlib.pyplot as plt
def calculate_distance(data, centroids):
# 计算数据点到所有质心的距离,返回一个距离矩阵
distance = np.zeros([len(data), len(centroids)])
for i in range(len(data)):
for j in range(len(centroids)):
distance[i][j] = np.linalg.norm(data[i] - centroids[j])
return distance
def kmeans(data, k):
# 随机初始化k个质心
centroids = np.random.choice(data, k, replace=False)
# 初始化聚类结果和上一次的聚类结果
clusters = np.zeros(len(data))
last_clusters = clusters.copy()
while True:
# 计算数据点到所有质心的距离
distance = calculate_distance(data, centroids)
# 对每个数据点,找到距离最近的质心
clusters = np.argmin(distance, axis=1)
# 如果聚类结果没有改变,跳出循环
if (clusters == last_clusters).all():
break
last_clusters = clusters.copy()
# 更新质心
for i in range(k):
centroids[i] = np.mean(data[clusters == i], axis=0)
return centroids, clusters
# 生成一些随机数据
data = np.random.randn(100, 2)
# 聚类
centroids, clusters = kmeans(data, 3)
# 绘制聚类结果
plt.scatter(data[:, 0], data[:, 1], c=clusters)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
```
上述代码中,我们首先定义了一个计算数据点到所有质心距离的函数`calculate_distance`,然后实现了kmeans算法的主函数`kmeans`。在主函数中,我们随机初始化k个质心,然后计算每个数据点到所有质心的距离,对于每个数据点,找到距离最近的质心,将其分到相应的聚类中,并更新质心,直到聚类结果不再改变为止。最后,我们使用Matplotlib库将聚类结果可视化出来。