【机器学习300问】38、什么是K-means算法?

        在实际工作中,我们经常会遇到这样一类问题:给机器输入大量的特征数据,并期望机器通过学习找出数据存在的某种共性特征、结构或关联。这类问题被称为“非监督学习”问题。这篇文章我就来聚焦非监督学习中的其中一个任务——聚类

        例如在数字营销中,可以基于用户在线浏览习惯、点击历史、社交媒体行为等多维度数据进行聚类分析。发现几个主要的用户群体,比如“科技发烧友”、“健身爱好者”和“亲子家庭”等。对于每一个细分群体,企业可以设计并推送定制化的广告内容,从而提高广告效果和转化率。

一、聚类是什么?

        我之前的文章中提到的支持向量机SVM、逻辑回归和决策树机器学习算法都是用于分类问题。即更具一些已经给定类别标签的样本,训练某种分类器,使得他们能够对类别未知的样本进行分类。与分类问题不同,聚类是在事先不知道任何样本的类别标签的情况下,通过数据之间的内在关系把样本划分为若干类别,使得同类样本之间相似度高,不同类之间相似度低。

        总结起来对聚类下个定义:聚类是机器学习中的一种无监督学习方法,它旨在通过相似性或距离度量将物理或抽象对象的集合自动划分为多个类别或簇。

二、什么K-means算法?

        K-means算法又叫做K均值算法,他是一种迭代的无监督聚类方法,通过将数据集中的样本点划分到不同的K个簇中,来寻找数据的内在关联。

(1)K-means算法的目标

  • 将数据集划分为K个簇,使得每个簇内的数据点彼此相似度较高,而不同的簇之间的数据点差异较大。
  • 簇内的相似性通常基于欧式距离,即簇内所有数据点与该簇中心点的距离之和尽可能的小。

(2)如何判断两个样本相似?

        通过两点之间的欧式空间中的距离,公式如下:

dis(a,b)=\left \| a,b \right \|=\sqrt{(a_1-b_1)^2+(a_2-b_2)^2}

三、简述K-means算法的具体步骤

(1)初始化

        将数据样本先进行预处理(归一化、离群点处理等等),然后随机选取K个质心(簇中心),记为\mu _{1}^{(0)},\mu _{2}^{(0)}\mu _{3}^{(0)}...\mu _{K}^{(0)}

        定义代价函数,常用的代价函数是各个样本距离所属簇中心点的误差平方和:

J(c,\mu)=\sum_{i=1}^{m}\left \| x_i-\mu_{c_i} \right \|^2

符号解释
J代价函数
x_i指第i个样本
c_ix_i所属的簇
\mu_{c_i}c_i簇对应的中心点
m是样本总数
\mu_{k}第k个簇的中心点(质心)

(2)分配阶段

        计算数据集中每个数据点到K个质心的距离,并将每个数据点分配给最近的质心所在的簇。

  • 每个样本x_{i}将其分配的距离最近的簇,公式如下:

c_{i}^{(t)}\leftarrow \underset{k}{argmin}\left \| x_i-\mu_{k}^{(t)} \right \|^2

(3)更新阶段

        根据每个簇中新分配的数据点重新计算簇的质心,通常是取簇内所有数据点坐标的平均值作为新的质心。

  • 每个类簇k,重新计算该类簇的中心,公式如下:

\mu_{k}^{(t+1)}\leftarrow \underset{\mu}{argmin}\sum_{i:c_{i}^{(t)}=k}^{}\left \| x_i-\mu \right \|^2

        举例说明:比如有4个样本x_i他们的坐标是(a_i,b_i),他们的质心计算可以拆解为,先计算x轴的平均值a_{\mu}=\frac{1}{4}(a_1+a_2+a_3+a_4),再计算y轴的平均值b_{\mu}=\frac{1}{4}(b_1+b_2+b_3+b_4),新质点\mu的位置就是(a_{\mu},b_{\mu})

(4)迭代优化

        重复步骤2和步骤3,直到满足终止条件为止,常见的终止条件包括预设的最大迭代次数或者质心移动的距离小于某个阈值,或者簇间的质心不再显著改变。

K均值聚类算法的迭代过程示意图

三、K-means算法的优缺点是什么

(1)优点

        算法流程直观,易于理解与实现,适合大规模数据集处理。对于大数据集有相对较低的时间复杂度(尤其是在维度不太高时)。可以通过并行化技术在分布式环境下加速运行。在适当初始化的情况下,算法通常能快速收敛到局部最优解。得到的聚类结果具有明确的几何意义,每个簇有一个中心点,可以直观地解释和可视化。

(2)缺点

  • 需要预设K值需要预先确定簇的数量K,但在实际应用中这个值可能难以估计,选择不当会影响最终聚类效果。
  • 对初始质心敏感:算法收敛结果依赖于初始质心的选择,不同的初始质心可能导致不同的聚类结果。
  • 陷入局部最优:由于采用迭代优化方法,容易陷入局部最优,无法保证找到全局最优解。
  • 对异常值敏感:算法基于欧氏距离度量,因此对噪声点和离群点非常敏感,这些点可能严重影响聚类中心的位置。

四、预设K值等于几?

        我怎么知道要聚成几类呢?K-means算法的关键在于K值的选择,即最终要形成的簇的数量。K值的选择对聚类结果有很大影响,通常使用肘部法则(Elbow Method)或轮廓系数 (Silhouette Coefficient)等技术来选择最佳的K值。

(1)肘部方法

        运行K-means算法多次,每次使用不同的K值,通过绘制不同K值下代价函数值(即各个样本点到其所属簇中心的平方误差之和,简称SSE=Sum of Squared Errors)与K的关系图,寻找曲线“弯折”的位置,即增加K值时SSE下降速度明显减缓的那个点作为最佳K值。

(2)轮廓系数

        计算每个样本点的轮廓系数,该系数衡量了样本点与其所在簇内其他样本的相似度与它与其他簇样本点的差异程度。当所有样本点的平均轮廓系数达到最大时对应的K值是较好的选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

供应链投毒预警 | 恶意Py组件tohoku-tus-iot-automation开展窃密木马投毒攻击

概述 上周(2024年3月6号),悬镜供应链安全情报中心在Pypi官方仓库(https://pypi.org/)中捕获1起新的Py包投毒事件,Python组件tohoku-tus-iot-automation 从3月6号开始连续发布6个不同版本恶意包&#xff0c…

士兵排列问题

解法一&#xff1a; deque实现队头入队和队尾入队即可得到编号排列&#xff0c;每个士兵有二个属性&#xff1a;编号、能力值。 #include<iostream> #include<algorithm> #include<deque> #include<vector> using namespace std; #define endl \n st…

CTF 题型 SSRF攻击例题总结

CTF 题型 SSRF攻击&例题总结 文章目录 CTF 题型 SSRF攻击&例题总结Server-side Request Forgery 服务端请求伪造SSRF的利用面1 任意文件读取 前提是知道要读取的文件名2 探测内网资源3 使用gopher协议扩展攻击面Gopher协议 &#xff08;注意是70端口&#xff09;python…

js教程(7)

一、事件监听&#xff08;事件绑定&#xff09; 1.事件 事件是在编程时系统内发生的动作或者发生的事情&#xff0c;比如用户在网页上点击按钮&#xff0c;摁下键盘的某个键。 2.事件监听 事件监听就是让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即…

Midjourney订阅攻略/Midjourney的基本参数和命令

AI绘画软件Midjourney使用原理 Midjourney是一个由Midjourney研究实验室开发的先进的人工智能程序&#xff0c;它可以根据用户的文本输入生成精美的图像。Midjourney的主要原理是通过收集大量已有的作品数据&#xff0c;对这些数据进行算法解析&#xff0c;它就可以通过关键词生…

【机器学习】函数

sigmoid函数 import matplotlib.pyplot as plt import numpy as npdef sigmoid(x):return 1/(1np.exp(-x))def plot_sigmoid():# param:起点&#xff0c;终点&#xff0c;间距x np.arange(-10, 10, 0.1) #起点&#xff0c;终点&#xff0c;间距y sigmoid(x)plt.plot(x, y)plt…

【Web】浅聊Hessian反序列化之打Spring AOP——JNDI

目录 前言 简单分析 EXP 前言 前文&#xff1a;【Web】浅聊Java反序列化之Rome——关于其他利用链-CSDN博客 前文里最后给到一条HotSwappableTargetSource利用链&#xff0c;就是我们今天PartiallyComparableAdvisorHolder链子的前半段(触发恶意类的toString方法)&#xf…

蓝桥杯练习01卡片化标签

卡片化标签页 介绍 选项卡功能在前端开发中特别常见&#xff0c;作为设置选项的模块&#xff0c;每个选项卡代表一个活动的区域&#xff0c;点击不同的区域&#xff0c;即可展现不同的内容&#xff0c;这样既能节约页面的空间又能提升页面性能。 本题需要在已提供的基础项目中…

基于SpringBoot+Vue中国陕西民俗网(源码+部署说明+演示视频+源码介绍)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

[论文笔记] Gradient Surgery for Multi-Task Learning

【强化学习 137】PCGrad - 知乎 多任务学习(multi task):任务权重、loss均衡、梯度下降那点事 - 知乎 ICLR 2020 rejected submission:Yu T, Kumar S, Gupta A, et al. Gradient surgery for multi-task learning[J]. arXiv preprint arXiv:2001.06782, 2020. mul…

开源堡垒机Jumpserver安装教程

前言:堡垒机的应用场景 公司内有若干台服务器,既有windows的也有linux的, 提供有ERP,OA,Web,报表等等各种服务,往往需要远程登录到服务器上去做运维,但如果给root或者administrator权限,很容易出现不知道谁操作了的问题.如果不同人设置不同账号,又账号过多,权限不足等等其他问题…

HTML5球体下落粒子爆炸特效

HTML5球体下落粒子爆炸特效&#xff0c;源码由HTMLCSSJS组成&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 下载地址 HTML5球体下落粒子爆炸特效

【模拟】【C++算法】2826. 将三个组排序

LeetCode2826. 将三个组排序 给你一个下标从 0 开始长度为 n 的整数数组 nums 。 从 0 到 n - 1 的数字被分为编号从 1 到 3 的三个组&#xff0c;数字 i 属于组 nums[i] 。注意&#xff0c;有的组可能是 空的 。 你可以执行以下操作任意次&#xff1a; 选择数字 x 并改变它的…

易基因:人类大脑的单细胞DNA甲基化和3D基因组结构|Science

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 高通通量表观基因组分析技术可用于阐明大脑中细胞复杂性的基因调控程序。5-甲基胞嘧啶 (5mCs)是哺乳动物基因组中最常见的修饰碱基&#xff0c;大多数5mCs发生在胞嘧啶-鸟嘌呤二核苷酸&a…

聚合音乐网-播放器网站源码

源码简介 MKOnlineMusicPlayer 是一款全屏的音乐播放器 UI 框架&#xff08;为避免侵权&#xff0c;已移除所有后端功能&#xff09;。 前端界面参照 QQ 音乐网页版进行布局&#xff0c;同时采用了流行的响应式设计&#xff0c;无论是在PC端还是在手机端&#xff0c;均能给您…

HarmonyOS NEXT应用开发—使用绘制组件实现自定义进度动画

介绍 本示例介绍使用绘制组件中的Circle组件以及Path组件实现实时进度效果。该场景多用于手机电池电量、汽车油量、水位变化等动态变化中。 效果预览图 使用说明 加载完成后初始显示进度为0%&#xff0c;颜色为红色&#xff0c;且有充电、放电两个按钮。点击充电按钮&#x…

AcWing 1510:楼梯 ← 浮点数二分

【题目来源】http://poj.org/problem?id2507https://www.acwing.com/problem/content/1512/【题目描述】 一个街道两侧有两栋楼&#xff0c;现在有如图所示两楼梯 x&#xff0c;y。 两个楼梯分别如图放置。 已知两个楼梯的长度和他们交点离地面的高度&#xff0c;求两栋楼之间…

B树B+树,字典树详解,哈夫曼树博弈树

目录 B树&#xff1a;B-Tree B树 字典树&#xff1a;Trie Tree 哈夫曼树 博弈树 B树&#xff1a;B-Tree 多路平衡搜索树 1.M阶B树&#xff0c;就是M叉&#xff08;M个指针&#xff09;。 2.每个节点内记录个数<M-1。 3.根节点记录个数>1。 4.其余节点内记录个数&…

【C语言】Leetcode 35. 搜索插入位置

文章目录 题目思路代码呈现 题目 链接: link 思路 这题较简单&#xff0c;就是找到目标元素的下标&#xff0c;或者插入位置&#xff0c;如果不熟练的话&#xff0c;一开始想到的肯定是冒泡排序&#xff0c;就是一个一个查下去&#xff0c;然后返回下表&#xff0c;这种冒泡排…