机器学习_18 K均值聚类知识点总结

K均值聚类(K-means Clustering)是一种经典的无监督学习算法,广泛应用于数据分组、模式识别和降维等领域。它通过将数据划分为K个簇,使得簇内相似度高而簇间相似度低。今天,我们就来深入探讨K均值聚类的原理、实现和应用。

一、K均值聚类的基本概念

1.1 K均值聚类的目标

K均值聚类的目标是将数据集划分为K个簇,使得每个簇内的数据点尽可能接近,而不同簇之间的数据点尽可能远离。具体来说,K均值聚类最小化以下目标函数:

其中,Ck​ 是第k个簇,μk​ 是第k个簇的质心(均值),xi​ 是数据点。

1.2 K均值聚类的工作原理

K均值聚类通过以下步骤实现:

  1. 初始化质心:随机选择K个数据点作为初始质心。

  2. 分配数据点:计算每个数据点与各个质心的距离,将数据点分配到最近的质心所代表的簇。

  3. 更新质心:重新计算每个簇的质心为该簇所有数据点的均值。

  4. 重复步骤2和3:直到质心不再变化或达到预定义的停止条件(如最大迭代次数)。

二、K均值聚类的实现与案例

2.1 Python实现

以下是使用Python和Scikit-Learn库实现K均值聚类的代码示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans# 创建示例数据
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])# 创建KMeans对象,指定簇的数量为2
kmeans = KMeans(n_clusters=2)# 对数据进行聚类
kmeans.fit(X)# 获得每个样本所属的簇标签
labels = kmeans.labels_# 获得质心的位置
centroids = kmeans.cluster_centers_# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='x', s=200)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('K-means Clustering')
plt.show()

2.2 案例分析

假设我们有一组数据,记录了用户的购买行为和消费金额。我们希望通过K均值聚类算法将用户分为不同的群体,以便进行针对性的营销。

  • 数据准备:收集用户的购买行为和消费金额等特征。

  • 模型训练:使用K均值聚类算法对数据进行聚类,选择合适的簇数量K。

  • 结果分析:通过可视化和统计分析,了解每个簇的特征和行为模式。

  • 应用:根据不同簇的用户特征,制定个性化的营销策略。

三、选择K值的方法

3.1 肘部法(Elbow Method)

肘部法通过绘制不同K值下的目标函数(平方误差和)曲线,寻找曲线的“肘点”。肘点是指曲线开始变得平缓的点,表示增加更多的簇对减少误差的帮助较小。

3.2 轮廓系数(Silhouette Coefficient)

轮廓系数衡量了每个样本与其所属簇内其他样本的相似度与最近的其他簇内样本的相异度。选择轮廓系数最大的K值作为最佳簇数量。

3.3 Gap统计量(Gap Statistic)

Gap统计量通过比较数据集的簇内距离与随机生成数据的簇内距离的差异,选择Gap值最大的K值。

四、K均值聚类的局限性与优化

4.1 局限性

  • 对初始质心敏感:不同的初始质心可能导致不同的聚类结果。

  • 需要预先指定簇的数量K:选择合适的K值可能是一个挑战。

  • 对非凸形状簇效果差:K均值聚类假设簇为球形或凸形状,对于非凸形状的簇效果可能较差。

  • 对噪声和离群点敏感:可能会将噪声或离群点错误地分配到簇中。

4.2 优化方法

  • 多次运行:多次运行K均值聚类,选择目标函数值最小的结果。

  • 改进的初始化方法:如K-Means++,通过选择距离较远的初始质心来提高聚类效果。

  • 数据预处理:标准化或归一化数据,减少特征尺度差异的影响。

  • 选择合适的K值:通过肘部法、轮廓系数或Gap统计量选择最优的K值。

五、K均值聚类的应用场景

5.1 数据分组

K均值聚类广泛应用于将数据分为不同的组,例如:

  • 市场细分:根据消费者的购买行为和偏好将市场细分为不同的目标群体。

  • 图像分割:将图像中的像素分为不同的区域,以识别和分离不同的对象。

  • 文档聚类:将文本数据分为不同的主题或类别。

5.2 模式识别

K均值聚类可以用于识别数据中的模式和结构,例如:

  • 异常检测:通过聚类识别数据中的异常点或离群点。

  • 基因数据分析:将基因表达数据分为不同的簇,以发现基因的功能模块。

5.3 特征工程

K均值聚类可以用于特征降维和数据压缩,帮助简化数据并提取关键信息。


👏觉得文章对自己有用的宝子可以收藏文章并给小编点个赞!

👏想了解更多统计学、数据分析、数据开发、数据治理、机器学习算法、深度学习等有关知识的宝子们,可以关注小编,希望以后我们一起成长!

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode1287

LeetCode1287 目录 题目描述示例思路分析代码段代码逐行讲解复杂度分析总结的知识点整合总结 题目描述 给定一个非递减的整数数组 arr,其中有一个元素恰好出现超过数组长度的 25%。请你找到并返回这个元素。 示例 示例 1 输入: arr [1, 2, 2, 6, 6, 6, 6, 7,…

恒创科技:如何重新启动 Windows 服务器

重新启动 Windows 服务器对于应用更新、解决问题和维护系统性能至关重要。定期重新启动有助于确保服务器运行最新软件、解决冲突并清除临时文件。本教程将介绍如何使用不同的方法重新启动 Windows 服务器。 注意:重新启动服务器之前保存所有工作,以避免丢…

Django ModelForm使用(初学)

1.目的是根据员工表字段,实现一个新增员工的数据填写页面 2.在views.py文件中按下面的格式写 定义 ModelForm 类:UserModelForm (自己命名的类名)使用时需要导入包 定义视图函数:user_model_form_add(在函…

华为固态电池引发的思索

华为固态电池真牛! 超长续航:单次充电即可行驶3000公里 极速充电:五分钟内充满80% 极致安全:不可燃、不漏液 长寿命设计:循环寿命达10000次以上 如上是华为电池展示的优势项,每一条都让我们心动不已。…

美信监控易:运维新时代,守护数据安全

在 2025 年这个科技飞速发展的时代,数据安全已成为各行业关注的焦点。随着云计算、大数据、物联网等技术的不断推进,运维数据的保护面临着新的挑战与要求。美信时代公司的美信监控易运维管理软件,以其卓越的功能、特性和竞争力,为…

个人博客5年回顾

https://huangtao01.github.io/ 五年前,看程序羊的b站视频做的blog,受限于网络,只能单向学习,没有人指导与监督,从来没有想过,有没有什么问题? 一、为什么要做个人博客? 二、我是怎么…

Unity合批处理优化内存序列帧播放动画

Unity合批处理序列帧优化内存 介绍图片导入到Unity中的处理Unity中图片设置处理Unity中图片裁剪 创建序列帧动画总结 介绍 这里是针对Unity序列帧动画的优化内容,将多个图片合批处理然后为了降低Unity的内存占用,但是相对的质量也会稍微降低。可自行进行…

【Docker】容器被停止/删除的方式及命令:全面解析与实践指南

文章目录 引言一、容器的生命周期二、停止容器的命令及方式1. docker stop 命令2. docker kill 命令3. docker pause 和 docker unpause 命令4. docker restart 命令 三、删除容器的命令及方式1. docker rm 命令2. docker container prune 命令3. docker rm 与 docker rmi 的区…

大数据SQL调优专题——Flink执行原理

引入 上一篇我们了解了Spark,相比起MapReduce来说,它确实已经快了超级多了,但是人类的欲望是没有止境的,这也是推动人类进步的动力。 Flink就是为了满足实时响应的场景需求诞生的。 其实在Flink之前,实时处理其实已…

【Cocos TypeScript 零基础 16.1】

目录 FlappyBird背景其他心得_刚体audio部分 FlappyBird 本人没有按照老师的做法去做,大体差不多, 当然老师做的更精细,有些不会的还是参考老师的方法 参考部分 小鸟如何像真实物体一样的重力效果点击如何使小鸟飞翔 省略部分 3. 小鸟多动画(飞机大战其实有做,单纯偷懒) 4. …

CHARMM-GUI EnzyDocker: 一个基于网络的用于酶中多个反应状态的蛋白质 - 配体对接的计算平台

❝ "CHARMM-GUI EnzyDocker for Protein−Ligand Docking of Multiple Reactive States along a Reaction Coordinate in Enzymes"介绍了 CHARMM-GUI EnzyDocker,这是一个基于网络的计算平台,旨在简化和加速 EnzyDock 对接模拟的设置过程&…

腿足机器人之六- 前向运动学

腿足机器人之六- 前向运动学 刚体运动学基础坐标系定义旋转矩阵与欧拉角齐次变换矩阵(平移旋转的统一表示) 运动链建模串联运动链结构(从基座到末端的关节连接)标准Denavit-Hartenberg(D-H)参数法改进D-H参…

uni-app发起网络请求的三种方式

uni.request(OBJECT) 发起网络请求 具体参数可查看官方文档uni-app data:请求的参数; header:设置请求的 header,header 中不能设置 Referer; method:请求方法; timeout:超时时间,单位 ms&a…

【linux】更换ollama的deepseek模型默认安装路径

【linux】更换ollama的deepseek模型默认安装路径 文章目录 【linux】更换ollama的deepseek模型默认安装路径Ollama 默认安装路径及模型存储路径迁移ollama模型到新的路径1.创建新的模型存储目录2.停止ollama3.迁移现有模型4.修改 Ollama 服务配置5.重启ollama6.验证迁移是否成功…

「软件设计模式」装饰者模式(Decorator)

深入解析装饰者模式:动态扩展功能的艺术(C实现) 一、模式思想与应用场景 1.1 模式定义 装饰者模式(Decorator Pattern)是一种结构型设计模式,它通过将对象放入包含行为的特殊封装对象中,动态地…

java项目打包成docker镜像步骤

java项目打包成docker镜像步骤 1.使用maven把java文件打包成可执行的jar包2. 打包成Dockerfile3. 把jar包和DockerFile两个文件上传到服务器上。4. 制作镜像5.启动容器 1.使用maven把java文件打包成可执行的jar包 2. 打包成Dockerfile # 先从dockerhub找到对应版本的openjdk的…

后台管理系统-项目初始化

认识vue-admin **核心交付:** 为什么要基于现成架子二次开发 什么是二次开发:基于已有的代码(项目工程,脚手架)开进行新功能的开发 所以看懂已有的框架中的既有代码,变得很重要了 1. 背景知识 后台管理系统是一种最常见的应用模式,不同的管理系统之间有很多相似的地方…

【Scrapy】Scrapy教程6——提取数据

前一小节我们拿到了页面的数据,那页面中那么多内容,我们想要其中的部分内容,该如何获取呢?这就需要对我们下载到的数据进行解析,提取出来想要的数据,这节就讲讲如何提取数据。 引入 我们编辑保存下来的shouye.html文件看下,发现这是什么鬼,全是如下图的代码。 没错…

RabbitMQ 的工作模式

目录 工作模式 Simple(简单模式) Work Queue(工作队列) Publish/Subscribe(发布/订阅) Exchange(交换机)? Routing(路由模式) Topics(通配…

Copilot Next Edit Suggestions(预览版)

作者:Brigit Murtaugh,Burke Holland 排版:Alan Wang 我们很高兴向你介绍在本次 Visual Studio Code 发布中,关于 GitHub Copilot 的三个预览功能: Next Edit Suggestions(NES)Copilot Edits 的…