KNN

KNN

KNN:K-Nearest Neighbor
数据挖掘算法中最简单的一种

工作原理

示例:我们根据电影的打斗次数、接吻次数等指标来统计电影的类型。

分类:我们将打斗次数作为X轴,接吻次数作为Y轴,放在二维坐标轴上标记,对未知的电影分类我们看它在坐标轴的位置附近的电影类型。

  1. 计算待分类物体与其他物体之间的距离;
  2. 统计距离最近的K个邻居;
  3. 对于K个最近的邻居,它们属于哪个分类最多,待分类物体就属于哪一类。

KNN可以应用到 线性非线性 问题中,也可以用于回归分析。

K值的选择

K值的选择对于分类十分重要。

欠拟合: 与训练集误差较大,原因的特征维度过少,导致拟合的函数无法满足训练集,误差较大。

**过拟合: **与训练集误差较小,原因的特征维度过多,导致拟合的函数完美的经过训练集,对新测结果交叉。

鲁棒性: 也称为是强壮性、或者稳健性。

  • K值过小:相当于未分类的物体与它的邻居非常接近才行,产生一个问题如果邻居是个噪声点,那么未分类物体的分类会产生误差,那么KNN分类就会产生过拟合
  • K值过大:相当于距离过远的点也会对未知物体的分类产生影响,虽然这种情况 的好处是 鲁棒性 强,但是不足也很明显,会产生 欠拟合 情况,也就是没有把未分类的物体真正分类出来。

距离的计算

两个样本之间的距离代表了这两个样本之间的相似度。距离越大,差异性越大;距离越小,差异性越大。

距离计算的方式有以下五种:

  1. 欧氏距离;
  2. 曼哈顿距离;
  3. 闵可夫斯基距离;
  4. 切比雪夫距离;
  5. 余弦距离。

前三种距离是KNN常用的距离。

欧氏距离

最常用的距离公式,也叫做欧几里得距离,在二维空间中,两点的欧氏距离就是。

d = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 d = \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2} d=(x1y1)2+(x2y2)2

n维空间中的距离: d = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + … + ( x n − y n ) 2 = ∑ k = 1 n ( x i − y i ) 2 d = \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2 + … + (x_n - y_n)^2} = \sqrt{\sum\limits_{k=1}^n(x_i-y_i)^2} d=(x1y1)2+(x2y2)2++(xnyn)2 =k=1n(xiyi)2

曼哈顿距离

在几何空间用的较多,等于在两个点在坐标轴上绝对轴距综合。

d = ∣ x 1 − y 1 ∣ + ∣ x 2 − y 2 ∣ d = |x_1 - y_1| + |x_2 - y_2| d=x1y1+x2y2

闵可夫斯基距离

不是一个距离,而是一组距离的定义。对于n维空间的两个点x(x1,x2,..,xn),x和y两点之间的距离。

d = p ∑ i = 1 n ∣ x i − y i ∣ p d = p\sqrt{\sum\limits_{i=1}^n|x_i - y_i|^p} d=pi=1nxiyip

其中p代表空间的维数,当p=1时,就是曼哈顿距离;当p=2时,就是欧氏距离;当p=∞时,就是切比雪夫距离。

切比雪夫距离

两个点之间的切比雪夫距离就是两个点坐标数值的绝对值得最大值。

m a x ( ∣ x 1 − y 1 ∣ , ∣ x 2 − y 2 ∣ ) max(|x_1 - y_1|, |x_2 - y_2|) max(x1y1,x2y2)

余弦距离

实际上计算的是两个向量的夹角,是在方向上计算两者之间的差异,对绝对值不敏感。

在兴趣相关性上,角度关系比距离关系的绝对值更重要,因此余弦距离可以用于衡量用户对内容兴趣的区分度。

**搜索关键词推荐:**比如我们用搜索引擎搜索某个关键词,它还会给你推荐其他的相关搜多,这些推荐搜索的关键词就是采用余弦距离计算得到的。

KD树

是一个二叉树的数据结构,方便存储K维空间的数据。

KNN的计算过程是大量计算样本点之间的距离,为了减少计算距离次数,提升KNN的搜索效率,提出KD树。

KD树: 对数据点在K维空间中划分的一种数据结构。在KD树构造中,每个节点都是K维数值点的二叉树。可以采用二叉树的增删查改操作,提升了搜索效率。

用KNN做回归

KNN不仅可以做分类,还可以做回归。

分类: 对未知电影根据打斗次数来进行类型划分。

回归: 根据打斗次数来获取电影属于那种类型。

对于一个新的点,我们找到改点K个最相近的点,然后将这些点的属性平均值赋值给改点,就得到了改点的属性。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值