k-means聚类算法python实现方法
时间: 2023-06-02 16:01:52 浏览: 149
python实现k-means聚类算法
k-means聚类算法是一种无监督学习方法,用于将数据集分成k个类。其基本思想是将数据集划分为k个簇,每个簇对应一个聚类中心,使得簇内数据点到聚类中心的距离最小,而簇间数据点的距离最大。下面介绍k-means聚类算法的python实现方法。
1.导入相关库和数据集
首先需要导入相关库和数据集,本例使用sklearn库中的make_blobs模块生成一个随机数据集。
``` python
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据集
X, y = make_blobs(n_samples=200, centers=4, random_state=42)
```
2.初始化聚类中心
k-means算法需要对聚类中心进行初始化,可以随机选择k个数据点作为初始聚类中心。下面使用numpy库中的random模块随机选择k个数据点。
``` python
# 初始化聚类中心
k = 4
init_index = np.random.choice(X.shape[0], k, replace=False)
centroids = X[init_index]
```
3.迭代更新聚类中心和簇分配
k-means算法迭代更新聚类中心和簇分配,直到聚类中心不再变化或达到最大迭代次数。下面是完整的k-means聚类算法python实现代码。
``` python
def k_means(X, k, max_iter=100):
# 初始化聚类中心
init_index = np.random.choice(X.shape[0], k, replace=False)
centroids = X[init_index]
# 迭代更新聚类中心和簇分配
for i in range(max_iter):
# 计算每个数据点到聚类中心的距离
distances = np.sqrt(np.sum((X - centroids[:, np.newaxis])**2, axis=2))
# 簇分配
cluster = np.argmin(distances, axis=0)
# 更新聚类中心
for j in range(k):
centroids[j] = np.mean(X[cluster==j], axis=0)
return centroids, cluster
# 调用k_means函数进行聚类
centroids, cluster = k_means(X, 4)
# 可视化聚类结果
colors = ['r', 'g', 'b', 'y']
for i in range(4):
plt.scatter(X[cluster==i][:, 0], X[cluster==i][:, 1], c=colors[i])
plt.scatter(centroids[:, 0], centroids[:, 1], marker='*', s=300, c='black')
plt.show()
```
运行结果如下图所示,其中四个颜色代表四个簇,黑色星号代表聚类中心。
![k-means聚类算法python实现结果](https://img-blog.csdn.net/20180725161906370?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaWJvX3J1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
阅读全文