编写K-means算法
时间: 2023-12-01 11:05:46 浏览: 46
K-means算法是一种无监督学习算法,用于将数据集分成k个不同的簇。以下是一个简单的Python实现:
```python
import numpy as np
def kmeans(X, k, max_epochs=100):
# 随机初始化k个聚类中心
centroids = X[np.random.choice(range(len(X)), k), :]
# 记录每个样本所属的聚类中心的标签
labels = np.zeros(len(X))
# 迭代优化聚类中心
for epoch in range(max_epochs):
# 计算每个样本到每个聚类中心的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 将每个样本分配到距离最近的聚类中心
new_labels = np.argmin(distances, axis=0)
# 如果聚类中心不再变化,停止迭代
if (new_labels == labels).all():
break
labels = new_labels
# 更新聚类中心为每个簇的平均值
for i in range(k):
centroids[i] = X[labels == i, :].mean(axis=0)
return labels, centroids
```
其中,X是一个二维数组,每一行表示一个样本的特征向量;k是要分成的簇的数量;max_epochs是最大迭代次数。函数返回每个样本所属的簇的标签和每个簇的聚类中心。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)