当前位置:   article > 正文

实现kmeans聚类的Python代码_kmeans聚类python代码

kmeans聚类python代码

K-means聚类算法是一种无监督学习的算法,它的目标是将数据集划分为K个不同的簇(clusters),每个簇由其内部数据点的均值(即中心点或质心)来表示。算法通过迭代的方式,将数据点分配到最近的质心,然后重新计算质心,直到达到一定的停止条件(如最大迭代次数、质心位置不再变化或变化非常小)。

以下是K-means聚类算法的基本步骤:

  1. 初始化:选择K个数据点作为初始质心。这些质心可以随机选择,也可以使用一些启发式方法来选择。

  2. 分配数据点到簇:对于数据集中的每个点,计算它与K个质心的距离(通常使用欧氏距离),并将其分配到距离最近的质心对应的簇中。

  3. 更新质心:对于每个簇,计算分配给该簇的所有数据点的均值,并将该均值作为新的质心。

  4. 迭代:重复步骤2和3,直到质心的位置不再发生明显变化,或者达到预设的最大迭代次数。

以下为Python代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# 设置随机种子以确保结果的可重复性
np.random.seed(0)

# 随机产生数据
n_samples = 300
n_clusters = 3
X = np.concatenate([
    np.random.randn(n_samples // n_clusters, 2) + np.array([-5, -5]),
    np.random.randn(n_samples // n_clusters, 2) + np.array([0, 5]),
    np.random.randn(n_samples // n_clusters, 2) + np.array([5, -5])
])


# K-means算法
def kmeans(X, n_clusters, max_iter=100):
    # 1. 随机初始化聚类中心
    indices = np.random.choice(len(X), n_clusters, replace=False)
    centroids = X[indices, :]

    for _ in range(max_iter):
        # 2. 分配样本到最近的聚类中心
        labels = np.argmin(np.linalg.norm(X[:, np.newaxis] - centroids, axis=2), axis=1)

        # 3. 重新计算聚类中心
        new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(n_clusters)])

        # 4. 检查聚类中心是否有变化,若无则停止迭代
        if np.all(centroids == new_centroids):
            break

        centroids = new_centroids

    return centroids, labels


# 运行K-means算法
centroids, labels = kmeans(X, n_clusters)

# 绘制分类图
cmap = ListedColormap(('red', 'blue', 'green'))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap=cmap, marker='o', s=50)

# 绘制聚类中心
plt.scatter(centroids[:, 0], centroids[:, 1], c='black', marker='x', s=200, linewidth=3)

plt.title('K-means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/678888
推荐阅读
相关标签
  

闽ICP备14008679号