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 ...
最新文章
- 特征点检测学习_2(surf算法)
- http_load安装与测试参数分析
- MMORPG大型游戏设计与开发(part3 of net)
- truncate、drop、delete区别
- LeetCode MySQL 1532. The Most Recent Three Orders(dense_rank + over窗口函数)
- 深入理解计算机系统第四版_深入理解计算机系统之存储器层次结构
- 【java】java JVM如何科学的设置内存参数 虚拟机调优案例
- Spring(一)概述
- arch_version(12) of input model should be 11!
- 奥威软件大数据bi_有成熟数据分析方案的BI软件
- duilib介绍-1
- mysql8安装错误,Windows安装MySQL8.0.16 的步骤及出现错误问题解决方法
- java emoji表情_java处理emoji表情的方法
- 操盘手的灵魂 - 交易纪律
- idea 将分支代码合并到master分支
- Mac 不能写入移动硬盘的解决方案
- 专访Mobvista创始人段威:选择港交所上市有三层意义
- H5游戏框架phaser实例二(附上传到服务器的教程)
- 36Kr皇包车-第1个投资退出案例
- plsql登录时没有可选数据库和链接问题