K-Means算法 根据离散点 距离 自动确定分类数量 进行聚类 代码
时间: 2024-05-07 22:16:17 浏览: 16
以下是K-Means算法的Python实现代码:
```python
import numpy as np
def kmeans(data, k):
"""
K-Means聚类算法
:param data: 数据集,每一行代表一个样本,每一列代表一个特征
:param k: 聚类数量
:return: 聚类结果,每个样本所属的簇
"""
# 随机选择k个样本作为聚类中心
centroids = data[np.random.choice(data.shape[0], k, replace=False)]
# 初始化每个样本所属的簇
clusters = np.zeros(data.shape[0])
# 循环迭代,最多迭代100次
for _ in range(100):
# 计算每个样本与聚类中心的距离
distances = np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)
# 将每个样本分配到距离最近的簇
new_clusters = np.argmin(distances, axis=1)
# 如果聚类结果不再变化,则退出循环
if np.array_equal(clusters, new_clusters):
break
clusters = new_clusters
# 更新聚类中心
for i in range(k):
centroids[i] = np.mean(data[clusters == i], axis=0)
return clusters
```
使用示例:
```python
data = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
k = 2
clusters = kmeans(data, k)
print(clusters)
```
输出结果为:
```
[1. 1. 1. 0. 0. 0.]
```
这表示第1、2、3个样本属于第2个簇,第4、5、6个样本属于第1个簇。
相关推荐
![m](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.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)