kmeans聚类算法代码详细python
时间: 2023-05-18 17:01:06 浏览: 255
kmeans聚类算法python实现
K-均值聚类是一种常见的无监督机器学习算法,用于将数据分成几个不同的组。理论上,算法可以被用于任何类型的数据集,但是,需要对每个点建立距离度量,来预测该点可能属于哪个聚类。下面是Python中K-means聚类算法的代码详细解释。
代码如下:
```
import numpy as np
import matplotlib.pyplot as plt
def k_means(X, k, max_iters=10):
centroids = X[np.random.choice(range(len(X)), k), :]
for i in range(max_iters):
C = np.array([np.argmin([np.dot(x_i-centroids[j],x_i-centroids[j]) for j in range(k)]) for x_i in X])
centroids = [X[C == j].mean(axis=0) for j in range(k)]
return np.array(centroids), C
# 创建数据集
np.random.seed(0)
X = np.vstack((np.random.randn(100,2)*0.75 + np.array([1,0]),
np.random.randn(100,2)*0.25 + np.array([-0.5,0.5]),
np.random.randn(100,2)*0.5 + np.array([-0.5,-0.5])))
# 调用k_means函数并输出结果
centroids, C = k_means(X, 3)
fig, ax = plt.subplots(figsize=(8,8))
plt.scatter(X[:,0], X[:,1], c=C.astype(float))
plt.scatter(centroids[:,0], centroids[:,1], marker='*', s=300, c='r')
```
解释:
* 第1行–导入必要的Python库,以及我们将要用到的函数。
* 第3-5行–函数接受输入,其中包括数据集X,期望的聚类数k和最大迭代次数max_iters。函数定义了一个初始聚类中心点centroids,然后迭代max_iters次计算最终聚类中心点。
* 第6行-使用numpy中的随机数生成器,从数据集中随机选择k个点作为初始聚类中心点centroid。
* 第7-10行-通过计算每个点到聚类中心点的距离,确定每个点所属的聚类,并将新的聚类中心点计算为属于对应聚类的所有点的平均值。这个过程将重复进行max_iters次。
* 第11-12行-将 点的聚类信息C返回,并返回最终的聚类中心点centroids。
* 第14-21行–创建一个数据集,并将它们传递给刚创建的函数。然后,绘制数据点,使用不同的颜色表示两个聚类,用red '*'表示所得到的聚类中心点。
该算法能够将数据聚类成不同的组,可以使用在几乎所有需要分类的情况下,该算法具有快速的性能和易于实现的优势。
阅读全文