K-means原理及Matlab实现

前言

作为励志在机器学习界闯出一片天地的小女子,在此整理学习到的机器学习方法,并使用Matlab及Python实现。希望可以和大家互相交流和探讨。
联系方式:shitianqi1994@163.com


K-means原理

k-means应该是入门机器学习最早接触的算法之一了,它使用简单富有美感的算法深刻地表达了教机器学习的思想,其中蕴含的EM思想会在后续的博文中详细讲解。

从它的名字上解析一下,k代表了你要将数据分为几类(也就是后文提到的seed个数,别急,后面你会深刻理解),而means即为平均值,这也是此算法的核心。

宏观上来看它属于无监督学习,(无监督学习指:数据仅给出了特征值,未给出数据的标签,监督学习则同时给出了特征值和标签)

它具体的思想是什么呢,容我细细道来。


假设我们要将以下情况的点分开:

这里写图片描述

在这个例子中,我们用肉眼可以观察到这个数据大致可以分成两类。而需要注意的是在实际情况的应用上,可以直接观察到类别个数基本是不可能的,主要原因有以下两点:

  1. 实际数据特征向量的维数很高,实现可视化是十分困难的。
  2. 实际数据通常耦合程度高,没有清晰的分界线。

所以在这里需要提到一个题外话,在现实生活中往往是根据实际需要确定分类类别。举个栗子:你是一家制衣厂的老板,你有一大堆用户身高体重肩宽腰围等等的数据,你希望可以对用户群体分个类,来确定s,m,l码的衣服分别应该适合多大身材维度的用户。这里就可以使用kmeans。在这里,你就按照实际情况直接将k设置成了3。


好了,聊了一些闲话,现在重回主题,我们希望将上图数据进行分类,并且确定了k=2,即分成两类。接下来,我们在所有数据点中随机选取两个种子(seed),播种下这两颗种子,一切交给机器来学习吧!

这里写图片描述


所有点将会和两个seed进行比较,和哪个更加相似就加入哪个seed的阵营。

这里需要引入一个相似的概念,在数学上,表征相似程度的参数有许多:距离,相关系数等等。本文代码采用简单的欧式距离,有心的小伙伴可以尝试不同的方法进行尝试。

这里写图片描述


上图中所有的点都已经确定了自己的红蓝阵营。此时重新计算seed值,即所有红色点的特征值求平均作为新的红

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值