机器学习入门(一)—— KNN邻近算法

KNN邻近算法

一、KNN简介

KNN的基本思想简单直观:在处理某些问题时,我们认为两个实例在特征空间中的距离反映了它们之间的相似程度,距离越近则越相似。那么,对于一个输入实例 x 的类别或目标值,可根据训练集中与其距离最近的一些实例(最相似的实例)的类别或目标值进行推断。

假设数据集 D 为训练集,KNN对输入实例 x 进行预测的算法可描述为:
(1)根据某种距离度量方法(通常为欧式距离),找到 D 中与 x 距离最近的 k 个实例。
(2)根据最近的 k 个实例的类别或目标值,对 x 的类别或目标值进行预测:

  • 对于分类问题使用“投票法”,即取 k 个实例中出现最多的类标记作为 x 的预测结果。
  • 对于回归问题使用“平均法”,即取 k 个实例的目标值的平均值作为 x 的预测结果。

下面通过一个简单的例子说明
在这里插入图片描述
当 k 的值设为1时,样本周围有1个红矩形和0个蓝三角形,所以该样例判定为 class2
当 k 的值设为5时,样本周围有2个红矩形和3个蓝三角形,所以该样例判定为 class1

一句话可以总结KNN:近朱者赤近墨者黑

下面是我在学习过程中看到的一个例子,觉得很形象,就拿来做例子
(图来自机器学习之KNN(k近邻)算法详解
基于电影中的搞笑、拥抱、打斗镜头,使用 k-近邻算法构造程序,就可以自动划分电影的题材类型。
在这里插入图片描述
重复上述操作,计算出所有电影和《唐人街探案》间的距离
在这里插入图片描述
由图中可以看到,距离《唐人街探案》最近的5个电影中,有4个喜剧片和1个爱情片,所以《唐人街探案》被判断为是喜剧片

下面这个例子,表示有三个用户和四本书,现在要给 用户3 推荐一本书
表格中是各个用户对每本书的评价。

书\用户用户1用户2用户3
书18100
书20210
书3149
书4530

计算 用户3 和 用户1 的距离
在这里插入图片描述
计算 用户3 和 用户2 的距离
在这里插入图片描述
total = distance1 + distance2 = 29.98

用户1 的权重 w1 = distance1 / total ≈ 53.07%
用户2 的权重 w2 = distance2 / total ≈ 46.93%

其中 书2 和 书3 , 用户3 评论过,所以不计

所以预测 用户3
对 书1 的评价 v1:(用户1 对 书1 的评价) * w1 + (用户2 对 书1 的评价) * w2 = 8 * w1 + 10 * w2 ≈ 9

对 书4 的评价 v2:(用户一对书4的评价) * w1 + (用户二对书4的评价) * w2 = 5 * w1 + 3 * w2 ≈ 4

因为 v1 > v2,所以会给用户3 推荐 书1

二、距离的计算

可以使用欧氏距离或者曼哈顿距离

在这里插入图片描述
在这里插入图片描述
(一)首先计算当前点和数据集中的点之间的距离
(二)按照距离从小到大进行排序
(三)选取与当前点距离最小的 k 个点
(四)统计这 k 个点中类别出现频率
(五)返回频率最高的类别作为当前点的类别

优点:
1、思想简单,理论成熟,既可以用来做分类也可以用来做回归;
2、可用于非线性分类;
3、训练时间复杂度为O(n);
4、准确度高,对数据没有假设,对outlier不敏感;

缺点:
1、计算量大;
2、样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
3、需要大量的内存;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值