写一个最简单的kmeans
时间: 2023-07-23 22:08:34 浏览: 35
好的,以下是一个最简单的kmeans算法的Python实现:
```python
import random
def kmeans(data, k):
# 随机初始化质心
centroids = random.sample(data, k)
while True:
# 分配每个数据点到最近的质心
clusters = [[] for _ in range(k)]
for point in data:
distances = [((point[0]-c[0])**2 + (point[1]-c[1])**2)**0.5 for c in centroids]
closest_centroid_index = distances.index(min(distances))
clusters[closest_centroid_index].append(point)
# 计算新的质心
new_centroids = []
for cluster in clusters:
xs = [p[0] for p in cluster]
ys = [p[1] for p in cluster]
new_centroids.append((sum(xs)/len(xs), sum(ys)/len(ys)))
# 判断是否收敛
if new_centroids == centroids:
break
else:
centroids = new_centroids
return clusters
```
该算法接受一个二维数据集和聚类数k作为输入,返回k个簇。算法使用随机初始化的质心,并迭代分配每个数据点到最近的质心,然后计算新的质心。当新的质心与旧的质心相等时,算法收敛并返回结果。请注意,该算法的效率较低,因为它需要遍历数据集多次。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)