【Python 机器学习专栏】K-means 聚类算法在 Python 中的实现

简介: 【4月更文挑战第30天】K-means 是一种常见的聚类算法,用于将数据集划分为 K 个簇。其基本流程包括初始化簇中心、分配数据点、更新簇中心并重复此过程直到收敛。在 Python 中实现 K-means 包括数据准备、定义距离函数、初始化、迭代和输出结果。虽然算法简单高效,但它需要预先设定 K 值,且对初始点选择敏感,可能陷入局部最优。广泛应用在市场分析、图像分割等场景。理解原理与实现对应用聚类分析至关重要。

在机器学习领域,聚类分析是一种重要的探索性数据分析方法。K-means 聚类算法是其中一种常用的聚类算法,它简单高效,在许多实际应用中都有广泛的应用。本文将详细介绍 K-means 聚类算法的原理,并展示如何在 Python 中实现该算法。

一、K-means 聚类算法的原理

K-means 聚类算法的基本思想是将数据集划分为 K 个簇,使得每个数据点都属于距离其最近的簇中心。其主要步骤如下:

  1. 初始化:随机选择 K 个数据点作为初始簇中心。
  2. 分配数据点:计算每个数据点到各个簇中心的距离,将数据点分配到距离最近的簇中心所在的簇。
  3. 更新簇中心:根据分配到各个簇的数据点,重新计算簇中心的位置。
  4. 重复步骤 2 和 3:直到簇中心的位置不再发生明显变化或达到预设的迭代次数。

二、K-means 聚类算法的实现步骤

  1. 数据准备:加载数据集并进行必要的预处理。
  2. 定义距离函数:通常使用欧几里得距离来计算数据点之间的距离。
  3. 初始化簇中心:随机选择 K 个数据点作为初始簇中心。
  4. 迭代过程:重复执行分配数据点和更新簇中心的步骤,直到满足停止条件。
  5. 输出结果:得到最终的聚类结果和簇中心。

三、在 Python 中实现 K-means 聚类算法

以下是一个简单的 K-means 聚类算法的 Python 实现示例:

import numpy as np
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 生成模拟数据集
X, y = make_blobs(n_samples=500, centers=3, cluster_std=0.6, random_state=0)

# 定义 K-means 聚类算法
def kmeans_clustering(X, K):
    # 初始化簇中心
    centroids = X[np.random.choice(X.shape[0], K, replace=False), :]

    while True:
        # 分配数据点到簇
        distances = np.sqrt(((X - centroids[:, np.newaxis]) ** 2).sum(axis=2))
        labels = np.argmin(distances, axis=0)

        # 更新簇中心
        new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(K)])

        # 检查簇中心是否变化
        if np.allclose(centroids, new_centroids):
            break

        centroids = new_centroids

    return labels, centroids

# 执行 K-means 聚类
K = 3
labels, centroids = kmeans_clustering(X, K)

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='rainbow')
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, c='black')
plt.show()

四、K-means 聚类算法的优缺点

  1. 优点:简单易懂,计算效率高,对大规模数据集也能较好地处理。
  2. 缺点:需要事先指定簇的数量 K,对初始簇中心敏感,可能会陷入局部最优解。

五、应用场景

K-means 聚类算法广泛应用于市场细分、客户分类、图像分割等领域。通过对数据的聚类分析,可以发现数据中的潜在模式和结构。

六、总结

K-means 聚类算法是一种经典的聚类算法,在 Python 中有多种实现方式。理解其原理和实现过程对于应用聚类分析解决实际问题具有重要意义。在实际应用中,需要根据数据特点和需求选择合适的聚类算法,并结合其他方法进行进一步的分析和处理。

希望本文能为你提供关于 K-means 聚类算法在 Python 中实现的全面认识,助力你在机器学习的探索中取得更好的成果。

相关文章
|
3天前
|
机器学习/深度学习 人工智能 算法
食物识别系统Python+深度学习人工智能+TensorFlow+卷积神经网络算法模型
食物识别系统采用TensorFlow的ResNet50模型,训练了包含11类食物的数据集,生成高精度H5模型。系统整合Django框架,提供网页平台,用户可上传图片进行食物识别。效果图片展示成功识别各类食物。[查看演示视频、代码及安装指南](https://www.yuque.com/ziwu/yygu3z/yhd6a7vai4o9iuys?singleDoc#)。项目利用深度学习的卷积神经网络(CNN),其局部感受野和权重共享机制适于图像识别,广泛应用于医疗图像分析等领域。示例代码展示了一个使用TensorFlow训练的简单CNN模型,用于MNIST手写数字识别。
18 3
|
3天前
|
算法 Python
Python中实现图论算法
Python中实现图论算法 “【5月更文挑战第20天】”
12 3
|
6天前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】K-means算法与PCA算法之间有什么联系?
【5月更文挑战第15天】【机器学习】K-means算法与PCA算法之间有什么联系?
|
6天前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】维度灾难问题会如何影响K-means算法?
【5月更文挑战第15天】【机器学习】维度灾难问题会如何影响K-means算法?
|
7天前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】聚类算法中,如何判断数据是否被“充分”地聚类,以便算法产生有意义的结果?
【5月更文挑战第14天】【机器学习】聚类算法中,如何判断数据是否被“充分”地聚类,以便算法产生有意义的结果?
|
7天前
|
机器学习/深度学习 运维 算法
【机器学习】可以利用K-means算法找到数据中的离群值吗?
【5月更文挑战第14天】【机器学习】可以利用K-means算法找到数据中的离群值吗?
|
8天前
|
机器学习/深度学习 分布式计算 并行计算
【机器学习】怎样在非常大的数据集上执行K-means算法?
【5月更文挑战第13天】【机器学习】怎样在非常大的数据集上执行K-means算法?
|
8天前
|
机器学习/深度学习 算法 数据挖掘
【机器学习】列举几种情况,在这些情况下K-means算法难以取得较好效果
【5月更文挑战第13天】【机器学习】列举几种情况,在这些情况下K-means算法难以取得较好效果
|
8天前
|
算法 搜索推荐 C语言
Python实现数据结构与算法
【5月更文挑战第13天】学习数据结构与算法能提升编程能力,解决复杂问题,助你面试成功。从选择资源(如《算法导论》、Coursera课程、LeetCode)到实践编码,逐步学习基本概念,通过Python实现栈、队列和快速排序。不断练习、理解原理,探索高级数据结构与算法,参与开源项目和算法竞赛,持续反思与实践,以提升技术能力。
6 0
|
8天前
|
机器学习/深度学习 传感器 算法
【机器学习】在聚类算法中,使用曼哈顿距离和使用欧式距离有什么区别?
【5月更文挑战第12天】【机器学习】在聚类算法中,使用曼哈顿距离和使用欧式距离有什么区别?