机器学习系列——(十八)K-means聚类

引言

在众多机器学习技术中,K-means聚类以其简洁高效著称,成为了数据分析师和算法工程师手中的利器。无论是在市场细分、社交网络分析,还是图像处理等领域,K-means都扮演着至关重要的角色。本文旨在深入解析K-means聚类的原理、实现方式、优缺点及其应用,以期为读者提供全面而深入的理解。

一、K-means聚类简介

K-means是一种基于划分的聚类算法,它的目标是将n个对象根据属性分为k个簇,使得簇内的成员对象相似度高,而簇间的对象相似度低。简单来说,K-means试图找到数据空间中的K个簇心(centroid),并将每个对象分配给最近的簇心,从而形成K个簇。

二、算法原理

K-means聚类的核心思想可以概括为四个步骤:

  1. 初始化:随机选取K个数据点作为初始的簇心。
  2. 分配:对于数据集中的每一个点,计算它与各个簇心的距离,并将其分配给最近的簇心所代表的簇。
  3. 更新:对于每一个簇,重新计算该簇的簇心,通常取簇中所有点的均值。
  4. 迭代:重复步骤2和步骤3,直到簇心的变化小于某个阈值或达到预定的迭代次数为止。

这个过程通过不断迭代优化簇内的紧密度,最终达到局部最优解。

三、算法实现

虽然K-means的理念十分简明,但在实际实现时还需要考虑几个关键问题:

  • 初始化的影响:K-means的结果很大程度上依赖于初始簇心的选择。不同的初始化方法可能导致不同的聚类结果。为了改善这一点,可以采用K-means++算法来优化初始簇心的选择。
  • 选择K的值:确定最合适的簇数K是一个挑战。常用的方法包括肘部法则(Elbow Method)和轮廓系数(Silhouette Coefficient)等。
  • 计算距离:虽然欧氏距离是最常用的距离度量,但在某些情况下,曼哈顿距离或余弦相似度可能更适合。

下面是一个示例:

这个例子将使用scikit-learn库,这是Python中一个非常流行的机器学习库。如果你还没有安装scikit-learn,可以通过运行pip install scikit-learn命令来安装。

示例步骤

  1. 导入必要的库。
  2. 生成一组随机数据。
  3. 使用K-means算法对数据进行聚类。
  4. 可视化聚类结果。

示例代码

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs# 生成随机数据
# 这里我们生成一个有500个样本,每个样本有2个特征的数据集,这些数据集自然分为4个簇
X, y = make_blobs(n_samples=500, centers=4, cluster_std=0.60, random_state=0)# 可视化生成的数据
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.title("Generated Data")
plt.show()# 应用K-means聚类
# 初始化KMeans对象,设置聚类数为4
kmeans = KMeans(n_clusters=4)# 对数据进行拟合
kmeans.fit(X)# 预测每个样本所属的簇
y_kmeans = kmeans.predict(X)# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.5, marker='X')
plt.title("K-means Clustering")
plt.show()

在这个例子中,我们首先生成了一个包含500个样本的随机数据集,数据集中的样本自然分布在4个簇中。接着,我们使用KMeans类从scikit-learn库中初始化K-means算法,并设置聚类数(n_clusters)为4。然后,我们对数据进行拟合,并预测每个样本所属的簇。最后,我们通过散点图可视化了聚类的结果,其中不同的颜色代表不同的簇,红色的X标记表示每个簇的中心点。

四、优缺点

优点

  • 简单直观:算法流程清晰,易于理解和实现。
  • 高效率:时间复杂度相对较低,适合处理大数据集。
  • 广泛应用:适用于各种领域的聚类需求。

缺点

  • 对初始值敏感:不同的初始簇心可能导致不同的聚类结果。
  • 局部最优:算法可能只能找到局部最优解,而非全局最优解。
  • 固定簇数:需要预先指定簇数K,而在实际应用中K的最佳值往往难以确定。
  • 对异常值敏感:异常值或噪声数据会对聚类结果产生较大影响。

五、应用案例

K-means聚类在许多领域都有着广泛的应用:

  • 市场细分:通过客户购买行为的聚类分析,企业可以识别出不同的客户群体,从而制定更加精准的市场策略。
  • 文档分类:对文档进行聚类,可以自动地将文档分为不同的主题类别,提高信息检索的效率。
  • 图像分割:在图像处理中,K-means可以用于颜色聚类,进而实现图像的分割和压缩。

结论

K-means聚类因其简洁性和高效性,在机器学习领域占据了一席之地。虽然它存在一些局限性,如对初始值的依赖和对异常值的敏感性,但通过一些改进措施和技巧,这些问题可以得到有效缓解。掌握K-means聚类不仅能够帮助我们更好地理解数据的内在结构,还能够为解决实际问题提供有力的支持。随着数据科学和人工智能技术的不断进步,K-means及其变种算法的应用前景仍然广阔。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2777941.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Sodinokibi(REvil)黑客组织发起大规模供应链攻击

前言 Sodinokibi勒索病毒黑客组织获取了远程管理解决方案提供商Kaseya基础设施的访问权限,并使用VSA软件的恶意升级执行程序在企业网络上部署Sodinokibi(REvil)勒索病毒,据报道该事件已经影响了全球数千家公司,相关受害者发布的信息&#xf…

WWW 2024 | 时间序列(Time Series)和时空数据(Spatial-Temporal)论文总结

WWW 2024已经放榜,本次会议共提交了2008篇文章,research tracks共录用约400多篇论文,录用率为20.2%。本次会议将于2024年5月13日-17日在新加坡举办。 本文总结了WWW 2024有关时间序列(Time Series)和时空数据&#xf…

编译环境搭建及基础实验

1.VS code安装 Linux 版本安装 把资料盘里的安装包.deb拷贝到Ubuntu中, 使用如下命令安装: 软件图标都在目录/usr/share/applications 中,如图路径 复制到桌面中 Visual Studio Code 插件的安装 我们需要按照的插件有下面几个:…

【后端高频面试题--Mybatis篇】

🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 后端高频面试题--Mybatis篇 什么是Mybatis?Mybatis的优缺点?Mybatis的特点…

Netty源码系列 之 HashedWheelTimer源码

Netty优化方案 之前总结NioEventLoop以及其他内容时,已经总结了Netty许多优化的设计方案。 1.Selector的优化 (1) 为epoll空转问题提供了解决思路,虽然并没有从根本上解决epoll空转问题,但是使用一个计数器的方式可以减少空转所带来的性能…

BestEdrOfTheMarket:一个针对AVEDR绕过的训练学习环境

关于BestEdrOfTheMarket BestEdrOfTheMarket是一个针对AV/EDR绕过的训练学习环境,广大研究人员和信息安全爱好者可以使用该项目研究和学习跟AV和EDR绕过相关的技术知识。 支持绕过的防御技术 1、多层API钩子; 2、SSH钩子; 3、IAT钩子&#x…

【MySQL】-12 MySQL索引(上篇MySQL索引类型前置-1)

MySQL索引 索引1 索引基础2 索引与优化1 选择索引的数据类型1.1 选择标识符 2 索引入门2.1 索引的类型2.1.1 B-Tree索引2.1.2 Hash索引2.1.3 空间(R-Tree)索引2.1.4 全文(Full-text)索引 索引的优点:索引是最好的解决方案吗? 索引 索引(在MYS…

fast.ai 深度学习笔记(五)

深度学习 2:第 2 部分第 10 课 原文:medium.com/hiromi_suenaga/deep-learning-2-part-2-lesson-10-422d87c3340c 译者:飞龙 协议:CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它,…

blender几何节点中样条线参数中的系数(factor)是个什么概念?

一根样条线,通常由两个及以上的控制点构成。 每个控制点的系数,其实相当于该点处位于整个样条线的比值。 如图,一根样条线有十一个控制点。相当于把它分成了十段,那每一段可以看到x、y都是0,唯独z每次增加0.1&#xff…

华为机考入门python3--(9)牛客9-提取不重复的整数

分类:列表 知识点: 从右往左遍历每一个字符 my_str[::-1] 题目来自【牛客】 def reverse_unique(n): # 将输入的整数转换为字符串,这样可以从右向左遍历每一位 str_n str(n) # 创建一个空列表来保存不重复的数字 unique_digits []…

HiveQL——不借助任何外表,产生连续数值

注:参考文章: HiveSql一天一个小技巧:如何不借助其他任何外表,产生连续数值_hive生成连续数字-CSDN博客文章浏览阅读1.3k次。0 需求描述输出结果如下所示:12345...1001 问题分析方法一:起始值(…

【Linux系统学习】5.Linux实用操作 下

7.虚拟机配置固定IP 7.1 为什么需要固定IP 当前我们虚拟机的Linux操作系统,其IP地址是通过DHCP服务获取的。 DHCP:动态获取IP地址,即每次重启设备后都会获取一次,可能导致IP地址频繁变更 原因1:办公电脑IP地址变化无所…

sqli.labs靶场(41-53关)

41、第四十一关 -1 union select 1,2,3-- -1 union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schemadatabase()) -- -1 union select 1,2,(select group_concat(column_name) from information_schema.columns wher…

Android 粒子喷泉动效

一、前言: 在学习open gl es实现动效的时候,打算回顾了一下用普通的2D坐标系实现粒子效果和 open gl 3d 坐标系的区别,以及难易程度,因此本篇以Canvas 2D坐标系实现了一个简单的demo。 粒子动效原理: 粒子动效本质上…

python-分享篇-表白

文章目录 准备代码效果 准备 需要准备如下文件,已放置在下载处,名为“python-分享篇-表白” 代码 Function:仿抖音表白神器 Author:Charles 微信公众号:TONOWimport sys import cfg import random import pygame from tkinter import Tk, messagebox …

spring boot(2.4.x之前版本)和spring cloud项目中自动装配的监听执行顺序

目录 扫描 org.springframework.context.ApplicationListener 指定的类 内置的监听 spring boot 中的监听 spring boot autoconfigure 中的监听 spring boot context 中的监听 将加载的监听进行排序 spring boot 中的监听 spring boot context 中的监听 监听执行 监听…

“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【下】(分文件编程)

“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【下】(分文件编程) 前言预备知识1温湿度检测系统需求2.分文件编程核心思路3.分文件编程操作4利用分文件操作建立uart.c、lcd1602.c、dht11…

《乱弹篇(十二)聊春晚》

龙年大初一,老龄笔者发表《乱弹篇(十二)》。“十二”的标志,乃好事成双“二”。喜庆有余,自不待言! 除夕夜我没有看春晚,是在继续追剧,即以明朝宫廷内斗为背景的电视连续剧《后宫》…

2024年应该关注的十大人工智能创新

人工智能(AI)不再只是一个流行词,它已成为我们日常生活的重要组成部分。人工智能在去年深入地融入我们社会的各个方面,改变我们的生活方式、工作方式以及与技术互动的方式。 今年是大年初一,我们将探讨2024年可能出现…

Python实战:用Python程序实现春晚刘谦魔术

刘谦春晚魔术是一个让人叹为观止的魔术表演,其中涉及到了数学、编程和创意的结合。看了春晚魔术的朋友们,是不是好奇春晚刘谦的魔术是怎么变的。 在这篇文章中,我们将通过 Python 程序实现春晚刘谦魔术,让读者对这个魔术有更深入…