使用k-means算法对数据集聚类代码
时间: 2023-09-22 08:06:40 浏览: 88
下面是使用Python实现k-means算法对数据集进行聚类的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义距离函数(欧氏距离)
def dist(a, b):
return np.sqrt(np.sum(np.power(a - b, 2)))
# 定义k-means算法
def kmeans(data, k, max_iter=100):
# 随机选择k个中心点
centers = data[np.random.choice(data.shape[0], k, replace=False)]
# 初始化簇
clusters = [[] for _ in range(k)]
# 迭代
for i in range(max_iter):
# 将每个样本分配到最近的簇中
for j in range(data.shape[0]):
distances = [dist(data[j], c) for c in centers]
cluster_idx = np.argmin(distances)
clusters[cluster_idx].append(data[j])
# 计算新的簇心
new_centers = []
for c in clusters:
if len(c) > 0:
new_centers.append(np.mean(c, axis=0))
else:
new_centers.append(centers[np.random.choice(k)])
# 判断是否收敛
if np.allclose(centers, new_centers):
break
centers = new_centers
clusters = [[] for _ in range(k)]
return centers, clusters
# 生成随机数据集
data = np.random.randn(100, 2)
# 聚类
centers, clusters = kmeans(data, 3)
# 可视化结果
colors = ['r', 'g', 'b']
for i, c in enumerate(clusters):
c = np.array(c)
plt.scatter(c[:, 0], c[:, 1], c=colors[i])
plt.scatter(centers[:, 0], centers[:, 1], s=100, marker='x', c='k')
plt.show()
```
在上面的代码中,首先定义了距离函数(这里使用欧氏距离),然后实现了k-means算法,最后使用matplotlib库可视化了聚类结果。
阅读全文