图解机器学习“k-近邻算法”原理

背景介绍

首先要讲一个故事,不知道那个经纬度有个地方有两个部落,分别是 红点部落绿点部落
在这里插入图片描述
在他们的圈圈里有很多个居民—— 小点,红点部落的居民在他们部落内是红色,绿点部落的居民在他们部落内是绿色,两个部落的居民都偶尔会出来狩猎,但是当他们从部落里面出来之后就会变成灰色

在这里插入图片描述
由于部落的居民都有群聚习惯,所以他们会离自己的部落更近一些才更优安全感,如果我想知道一个灰色的家伙是属于什么颜色的,只需要看他离那个部落更近一些就知道了,但是这个时候有一个大胆的家伙灰长大胆走到了两个部落的中间位置。

在这里插入图片描述
为了弄清楚灰长大胆属于哪个部落,科学家们根据两个部落居民的群聚特性对灰长大胆和两个部落内全部居民的坐标进行定位,并计算他们之间的距离。

在这里插入图片描述

然后找到离灰长大胆最近的k个居民,并查看他们的护照,结果发现有一大部分都是绿点部落的人,然后就下定结论:灰长大胆属于绿点部落!

这也就是为什么这种分类算法叫做“k-近邻算法”

实际应用

在实际应用中大多数时候并不会用到距离这个概念,但是可以通过一定的方式把各个指标转变为距离信息。
例如,如果我们想评价一个人的胖瘦就可以用这种方法,比如横坐标是身高,纵坐标是体重。
我不知道灰长大胆是胖还是瘦,也不知道胖瘦的标准。但是我知道有很多胖子瘦子的身高和体重,我只需要对这群胖子的和瘦子的体重和身高做简单的归一化之后,同样带入归一化后的灰长大胆的身高和体重计算就可以。

在这里插入图片描述
计算结果发现跟灰长大胆身高体重更接近的k=7个人,其中有5个都是瘦子,那么就认为灰长大胆是个瘦子,所以k一般选奇数

但是出乎意料的是,如此简单粗暴的方法准确率却出了奇的高。缺点是如果样本比较大(已知胖子和瘦子特别多),且评价指标(身高、体重、肤色、年龄等)又比较多的时候计算效率就会很慢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K-Means算法是一种常用的聚类算法,用于将数据集分成多个类别。K-Means算法的基本思想是将数据集中的点分为K个簇,其中每个簇都具有相似的特征。 下面是基于质心的K-Means算法的图解: 1. 随机初始化K个质心,其中每个质心是一个向量,表示一个簇的中心点。 2. 对每个数据点,计算其到每个质心的距离,并将其分配到距离最近的质心所代表的簇中。 3. 对每个簇,计算其所有点的平均值,并将该平均值作为新的质心。 4. 重复步骤2和步骤3,直到质心不再改变或达到预定的迭代次数。 下面是一个简单的K-Means算法示例: 假设我们有如下数据集: ![image.png](attachment:image.png) 我们希望将这些数据分成两个簇。首先,我们随机初始化两个质心,如下图所示: ![image-2.png](attachment:image-2.png) 然后,我们计算每个数据点到每个质心的距离,并将它们分配到距离最近的质心所代表的簇中。在这个例子中,我们将数据点1、2、3分配到簇1中,将数据点4、5、6分配到簇2中。下图显示了这种分配方式: ![image-3.png](attachment:image-3.png) 接下来,我们计算每个簇的平均值,并将该平均值作为新的质心。在这个例子中,我们将簇1的平均值作为新的质心1,将簇2的平均值作为新的质心2。下图显示了这个过程: ![image-4.png](attachment:image-4.png) 然后,我们重复步骤2和步骤3,直到质心不再改变或达到预定的迭代次数。在这个例子中,我们得到了如下的最终结果: ![image-5.png](attachment:image-5.png) 可以看到,K-Means算法将数据集中的点成功分成了两个簇。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值