帮我用numpy写出一个k- means算法,并且可以显示出代价函数
时间: 2024-05-01 11:18:25 浏览: 6
好的,以下是关于使用numpy编写k-means算法并显示代价函数的代码:
```
import numpy as np
import matplotlib.pyplot as plt
def k_means(X, K, max_iters=10):
# X: 数据
# K: 类别数
# max_iters: 最大迭代次数
m, n = X.shape
centroids = X[np.random.choice(m, K, replace=False), :] # 随机初始化聚类中心
for i in range(max_iters):
idx = np.argmin(np.sum((X[:, np.newaxis, :] - centroids)**2, axis=2), axis=1) # 分配样本到聚类中心的类别
centroids = np.array([X[idx == k, :].mean(axis=0) for k in range(K)]) # 更新聚类中心
J = np.sum((X - centroids[idx, :])**2) # 计算代价函数
return J, idx
if __name__ == '__main__':
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
K = 2
J, idx = k_means(X, K)
print('代价函数值:', J)
print('样本的类别:', idx)
plt.scatter(X[:, 0], X[:, 1], c=idx)
plt.title('k-means')
plt.show()
```
这个算法使用numpy来实现k-means,并且提供代价函数J,以及样本的类别idx。除此之外,还用matplotlib来显示数据点及聚类结果图形。