传统kmeans完整代码
时间: 2024-04-30 19:16:49 浏览: 48
传统的K-means算法是一常用的聚类算法,它的代码实现相对简单。下面是一个简单的传统K-means算法的完整代码例:
```python
import numpy as np
def kmeans, k, max_iters=100):
# 随机选择k个初始聚类中心
centroids = X[np.random.choice(range(len(X)), k, replace=False)]
for _ in range(max_iters):
# 计算每个样本点到聚类中心的距离
distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=-1)
# 分配样本点到最近的聚类中心
labels = np.argmin(distances, axis=1)
# 更新聚类中心
new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(k)])
# 如果聚类中心不再变化,则停止迭代
if np.all(centroids == new_centroids):
break
centroids = new_centroids
return labels, centroids
# 示例数据
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
k = 2
# 调用K-means算法进行聚类
labels, centroids = kmeans(X, k)
# 打印聚类结果和聚类中心
print("聚类结果:", labels)
print("聚类中心:", centroids)
```
上述代码中,`kmeans`函数接受输入数据`X`、聚类数`k`和最大迭代次数`max_iters`作为参数。在函数内部,首先随机选择k个初始聚类中心,然后进行迭代更新,直到聚类中心不再变化或达到最大迭代次数。最后返回每个样本点的聚类标签和最终的聚类中心。
示例数据`X`是一个二维数组,表示样本点的特征。在示例中,我们选择了6个样本点,每个样本点有两个特征。聚类数`k`为2,表示将样本点分为两个簇。
运行上述代码,将得到聚类结果和聚类中心的输出。
阅读全文