请用python写一个k-means聚类算法代码,并输出不同簇的数据样本
时间: 2024-02-23 13:01:25 浏览: 75
基于Python实现并测试K-means聚类算法【100011717】
好的,以下是一个简单的k-means聚类算法的Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
# 生成数据集
X, y = make_blobs(n_samples=200, centers=4, random_state=42)
# 定义k-means函数
def k_means(X, k, max_iter=100):
# 随机初始化k个簇心
centroids = X[np.random.choice(len(X), size=k, replace=False)]
for _ in range(max_iter):
# 计算每个点到各个簇心的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 找到每个点所属的簇
labels = np.argmin(distances, axis=0)
# 更新簇心的位置
for i in range(k):
centroids[i] = X[labels == i].mean(axis=0)
return labels
# 调用k-means函数进行聚类
labels = k_means(X, k=4)
# 绘制不同簇的数据样本
plt.scatter(X[labels == 0][:, 0], X[labels == 0][:, 1], color='red')
plt.scatter(X[labels == 1][:, 0], X[labels == 1][:, 1], color='blue')
plt.scatter(X[labels == 2][:, 0], X[labels == 2][:, 1], color='green')
plt.scatter(X[labels == 3][:, 0], X[labels == 3][:, 1], color='orange')
plt.show()
```
在这个代码中,我们首先使用`make_blobs`函数生成了一个包含200个样本的数据集,其中有4个簇。然后定义了一个`k_means`函数,输入数据和簇数k,返回每个样本所属的簇的标签。在`k_means`函数中,我们首先随机初始化了k个簇心,然后进行了多轮迭代,每轮迭代都计算每个点到各个簇心的距离,找到每个点所属的簇,然后更新簇心的位置。最后,我们调用`k_means`函数进行聚类,并使用`plt.scatter`函数绘制了不同簇的数据样本。
阅读全文