一维数据kmeans聚类算法python
时间: 2023-08-28 19:07:50 浏览: 38
K-means聚类是一种常用的聚类算法,它是一种无监督的学习算法,可以将数据集分成K个簇。在K-means聚类算法中,首先需要随机选择K个初始质心,然后将数据集中的每个点分配到离它最近的质心所在的簇中,接着重新计算每个簇的质心,再次将数据集中的每个点分配到离它最近的质心所在的簇中,重复这个过程,直到簇的分配不再改变为止。
以下是Python实现一维数据K-means聚类算法的代码:
```python
import numpy as np
def kmeans(data, k):
"""
K-means聚类算法实现
:param data: 待聚类数据,一维数组
:param k: 聚类簇数
:return: 聚类中心列表,簇分配结果列表
"""
# 随机初始化聚类中心
centers = np.random.choice(data, size=k, replace=False)
old_assign = np.zeros(len(data)) # 上一次簇分配结果
while True:
# 计算每个数据点到各聚类中心的距离
distances = np.abs(data.reshape(-1, 1) - centers.reshape(1, -1))
# 对距离矩阵进行簇分配
assign = np.argmin(distances, axis=1)
# 如果簇分配结果不再改变,结束迭代
if np.all(assign == old_assign):
break
# 更新聚类中心
for i in range(k):
centers[i] = np.mean(data[assign == i])
old_assign = assign
return centers, assign
```
使用示例:
```python
data = np.array([1, 2, 5, 6, 7, 9, 10, 15, 17, 18])
centers, assign = kmeans(data, 3)
print("聚类中心:", centers)
print("簇分配结果:", assign)
```
输出结果:
```
聚类中心: [ 2. 9.5 17.5]
簇分配结果: [0 0 0 0 0 1 1 2 2 2]
```
其中,聚类中心分别为2、9.5和17.5,簇分配结果为0、0、0、0、0、1、1、2、2和2。