手动实现k-means聚类使用noise_moon数据集
时间: 2023-12-30 22:03:40 浏览: 33
以下是手动实现k-means聚类使用noise_moon数据集的Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
# 生成noise_moon数据集
X, y = make_moons(n_samples=200, noise=0.05, random_state=0)
# 定义k-means聚类函数
def k_means(X, k, max_iter=1000):
n_samples, n_features = X.shape
# 随机初始化k个聚类中心
centroids = X[np.random.choice(n_samples, k, replace=False)]
# 迭代更新聚类中心和聚类标签
for i in range(max_iter):
distances = np.zeros((n_samples, k))
for j in range(k):
distances[:, j] = np.linalg.norm(X - centroids[j], axis=1)
labels = np.argmin(distances, axis=1)
new_centroids = np.zeros((k, n_features))
for j in range(k):
new_centroids[j] = np.mean(X[labels == j], axis=0)
if np.all(centroids == new_centroids):
break
centroids = new_centroids
return centroids, labels
# 对数据集进行聚类
k = 2
centroids, labels = k_means(X, k)
# 绘制聚类结果
colors = ['blue', 'red']
for i in range(k):
plt.scatter(X[labels == i, 0], X[labels == i, 1], c=colors[i])
plt.scatter(centroids[:, 0], centroids[:, 1], marker='*', s=200, c='black')
plt.title('k-means Clustering with k=%d' % k)
plt.show()
```
上述代码生成了一个`noise_moon`数据集,并定义了一个`k-means`聚类函数。通过调用`k_means`函数对数据集进行聚类,并绘制聚类结果。结果如下图所示:
![k-means clustering with k=2](https://i.imgur.com/hnU6ZvU.png)