kmeans的基础原理,损失函数以及例子
kmeans的过程
kmeans的过程如下图所示
第一步:从M个对象中任意选择2个对象作为初始聚类的中心,如上图(b)所示。
第二步:计算每个对象到聚类中心的距离,把各个样本划分到与他们最近的中心所代表的类别中去,如图©所示。并且计算当前状态下的损失。
第三步:计算各类别所包含点的均值点,将其作为新的类别中心。如(d)所示。
第四步:重复第二步和第三步,知道连续的两次的损失值相差为某一设定值为止。
kmeans的原理
kmeans的聚类的过程中涉及四个关键点:k值的选择(就是聚几个类,这是超参数,需要人为给定),初始值,距离度量方式,损失函数。
第一,k值的选择
由于是超参数的原因,所以k值的选择依据你需要聚类的数目进行选择了。
第二,初始值
传统的kmeans使用的是随机选择。也有算法的优化,后面总结。
第三,距离度量方式
距离度量方式最多的还是欧式距离。
第四,损失函数
聚类问题的损失函数就是各个样本向量到对应簇均值向量的均方误差,假设样本点(x1,x2,……,xn)需要被聚类为k个簇(C1,C2,……,Ck),则各个簇内样本点的均值向量为:
其中,Nk为簇Ck中包含的样本数目,所有簇的总均方误差为:
kmeans的例子
上面过程看着还是有一些复杂,我们看一个例子。
假设我们有以下几个点:
x | y | |
---|---|---|
p1 | 0 | 0 |
p2 | 1 | 2 |
p3 | 3 | 1 |
p4 | 8 | 8 |
p5 | 9 | 10 |
p6 | 10 | 7 |
首先第一步,我们要选择聚为几类,这次我们将其聚类为2类,即k选为2
接着第二步,我们需要随机选择起始点,我们就选p1和p2吧。
接着第三步,距离的度量,欧式距离,我们算一下
p1(0,0) | p2(1,2) | |
---|---|---|
p3 | 3.16 | 2.24 |
p4 | 11.13 | 9.22 |
p5 | 13.45 | 11.31 |
p6 | 12.21 | 10.30 |
算出来p3,4,5,6和节点p1p2之间的距离后,我们看一下离谁近就将节点划分过去。p3和p2近,p4也和p2近,p5也是,p6也是。那么这次就被分为了两类。第一类:p1。第二类:p2,p3,p4,p5,p6
接着我们需要迭代了,因为我们需要达到损失函数的要求。这一轮迭代需要再选择中心,但是不是随机选择了,需要计算分类的中心,就是这次的中心是计算出来的。第一类就一个点,怎么计算也就是它了。第二类的坐标应该分别是(1+3+8+9+10)/5,(2+1+8+10+7)/5.即两个坐标是:(6.2,5.6)。
我们需要接着计算p2,3,4,5,6,到p1和(6.2,5.6)之间的距离。
(0,0) | (6.2,5.6) | |
---|---|---|
p2 | 2.24 | 6.32 |
p3 | 3.16 | 5.6 |
p4 | 11.13 | 3 |
p5 | 13.45 | 5.22 |
p6 | 12.21 | 4.05 |
我们这次算出来的分组应该是这样的,第一组:p1,p2,p3。第二组:p3,p4,p5.
我们还需要接着迭代下去,还是计算出对应分组的两个点,第一个点为(0+1+3)/3,(0+2+1)/3,即点为(1.33,1).第二个点为(8+9+10)/3,(8+10+7)/3,即点为(9,8.33)
继续算一下各个点到这两个点之间的距离
(1.33,1) | (9,8.33) | |
---|---|---|
p1 | 1.66 | 12.26 |
p2 | 1.05 | 10.2 |
p3 | 2.33 | 9.47 |
p4 | 9.67 | 1.05 |
p5 | 11.82 | 1.67 |
p6 | 10.54 | 1.2 |
这次分类的结果就是(p1,p2,p3),(p4,p5,p6).和上次迭代的结果是一样的,那么我们就认为可以停止迭代了最终结果就是分成这两类。
参考资料:
《机器学习基础从入门到求职》
https://www.jianshu.com/p/fc91fed8c77b
kmeans的基础原理,损失函数以及例子相关推荐
- Sniff网络基础原理和软件实现技巧详解
Sniff网络基础原理和软件实现技巧详解 前言 SNIFF真是一个古老的话题,关于在网络上采用SNIFF来获取敏感信息已经不是什么新鲜事,也不乏很多成功的案例,那么,SNIFF究竟是什么呢? SNIF ...
- SQL注入基础原理与案例(详细总结)
SQL注入基础原理与案例 一.前言 二.漏洞概述及危害 1.漏洞概述 2.漏洞危害 3.漏洞防范 三.SQL注入 1.SQL注入方式 (1)信息收集 (2)数据注入 (3)高权限注入 2.判断是否存在 ...
- python3网络爬虫笔记-爬虫基础原理
本笔记是学习崔庆才老师的网络爬虫课程的总结 一.HTTP基础原理 1. URI.URL.URN URI: Uniform Resource Identifier,即统一资源标志符 URL:Univer ...
- 网络爬虫(一):爬虫基础原理
一.学习前言 学习完Python语言后,总觉得有难以用武之地,纸上学来终觉浅,绝知此事要躬行,如果不加以使用就很容易忘记,为了加深python语言的记忆和理解,我选择学习网络爬虫的技术来进一步提升自己 ...
- 【机器学习】聚类算法中的 K-means 算法及其原理
系列文章目录 第十四章 Python 机器学习入门之聚类算法 目录 系列文章目录 前言 一.什么是聚类 二.K-means 聚类算法的直观理解 三.K-means 聚类算法公式 四.K-means 聚 ...
- 【机器学习】—— K-means聚类算法原理详解 以及 二维、三维数据的K-means聚类Python实现
文章目录 一.K-Means聚类算法原理过程 1.1 K-means聚类的一些细节 1.1.1 样本x(i)x^{(i)}x(i)与中心点μkμ_kμk距离的衡量 1.1.2 K-means聚类算法 ...
- Android自定义控件开发系列(零)——基础原理篇
在后边的文章中发现在说Android自定义时,有时候要重复解释很多东西,所以想想返回来增加一篇"基础原理篇",直接进入正题吧-- 首先的问题是:在Android项目开发中,什么时候 ...
- 【飞控开发基础教程10】疯壳·开源编队无人机-PID 基础原理
COCOFLY教程 --疯壳·无人机·系列 PID 基础原理 图1 一.PID 简介 PID 控制是自动控制系统中最常用的一种控制手段,它的诞生主 ...
- Java异常基础+原理解析+自定义异常
Java异常基础+原理解析 1.什么是异常呀? 程序中的异常就好比人生病了,即再程序的运行过程中.出现非正常的情况,导致jvm非正常终止终止 异常的体系: 异常的的根类为java.lang.Throw ...
最新文章
- 专访北京飞搜科技:一个创业公司该怎样在人工智能大潮中成长
- 想体验从活火山上滑下来的刺激感?VR来成全你
- php无法加载Memcache缓存模块问题及Memcache的安装
- flask中jinjia2模板引擎详解3
- mt6765和骁龙665哪个好_小米11正式发布,首发骁龙888+白送快充头,售价3999起
- CSS3实现多页签图片缩放切换效果
- android左右滑动开关,Android点击左右按钮实现左右滑动页面切换
- 同学借我钱好几年了,还是个包工头,没打欠条不讲还钱事,怎么办?
- flask实现后台java实现前端页面_java实现telnet功能,待实现windows下远程多机自动化发布软件后台代码...
- ssh之雇员管理系统(7)-spring可以启用注解的方式来配置属性+解决懒加载问题...
- 95后阿里P7晒出工资单:真的是狠狠扎心了...
- PHP PYTHON RUBY PERL
- 网络服务器带宽Mbps、Mb/s、MB/s有什么区别?10M、100M到底是什么概念?
- www.ku6d.com采集目标
- Chrome浏览器扩展插件的8种获利方式
- 网上免费平台学习美术
- Xilinx SDK编译Microblaze时出错
- 中国科学院大学计算机学科评估,中国科学院大学学科评估结果排名(第四次):最新完整版...
- 第四章:图像形态学处理 5-礼帽和黑帽
- 企业微信开发实战(五、自建应用-审批流程引擎之配置可信任域名、创建审批模版、发起审批)
热门文章
- linux 目录的粘滞位,linux下粘滞位引出的SUID和SGID
- 无穷小在袁萌脑海中的第一次闪光
- .NET 20周年专访 - 张善友:.NET 技术是如何赋能并改变世界的
- 阿诺德基础材质节点的连接
- 社科院与杜兰大学金融管理硕士项目——人生没有太晚的开始,不要过早的放弃
- Vuex页面刷新数据丢失的问题
- 2021-07-04 通过vmess对git进行代理(全局代理)
- 2019 Nanchang Online Contest Problem I Yukino With Subinterval
- 开源的新浪微博 Android 客户端:Aisen源码项目
- DELL服务器固件升级(BIOS/iDrac/Raid Upgrade)