机器学习算法:kNN和Weighted kNN

机器学习算法:kNN和Weighted kNN

一、KNN

kNN全称为k-nearest neighbors,中文名k邻近算法。

k邻近算法理念非常简单:

对于一个测试样本x,在训练样本中寻找k个“距离”x最近的样本,而后在这k个样本中统计数目最多的一个类,那么这一类就是x所在的类。
所以,kNN算法的步骤就出来了:

  1. 构建训练集和测试集
  2. 设定k的取值
  3. 计算测试样本和每个训练样本的距离
  4. 将计算出的距离降序排列,选择距离相对较小的k个样本作为测试样本的k个近邻。
  5. 找出k个近邻中数目最多的一个类,这个类就是我们想要的结果

ok,kNN介绍完毕。急着吃饭的小伙伴可以回去了,学到这些就足够吹了!我还要继续我的学习。

继续学什么呢?原理就这些原理,那就继续深入学习每一步吧!

(一)训练集和测试集
训练集:
我的理解,训练集是一个集合,集合里面每一个元素分为两部份:

一部分是一个n维向量(也可能是矩阵之类的),也叫特征向量,就是特征空间里面的向量。
另一部分是一个标签,也就是每一类别的代号。

测试集:
测试集是从一堆测试样本中提取出来的特征向量的集合,它和训练集基本一致,一般数量会少于训练集,我们可以在推理阶段将测试集样本输入,把得到的结果与测试集的标签对比,查看模型在测试集上的表现,注意,测试集数据不会放入模型中训练,仅仅作为检查模型性能之用。

(二)设定k的取值
这个问题很重要:
k太小,不具有抗干扰性,万一这几个最近的点有几个噪音怎么办?
k太大,不具有代表性,相当于用较大邻域中的训练实例进行预测,学习的近似误差会增大。
所以,经验来说:
一般k的取值不超过20,上限是n的开方,随着数据集的增大,K的值也要增大。

(三)距离
这个距离就有的说了。
怎样定义距离?
常见的有欧几里得距离余弦值, 相关度 , 曼哈顿距离

简单介绍一下吧:

1 欧几里得距离:
n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的欧氏距离(两个n维向量):
欧氏距离

2 余弦值
几何中,夹角余弦可用来衡量两个向量方向的差异;机器学习中,借用这一概念来衡量样本向量之间的差异。
二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:
在这里插入图片描述
两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦为:
在这里插入图片描述
即:
在这里插入图片描述
夹角余弦取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反余弦取最小值-1。

3 相关系数
相关系数:是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关):
在这里插入图片描述
相关距离:
在这里插入图片描述
4 曼哈顿距离
n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的曼哈顿距离:
曼哈顿距离
更多距离请移步:几种距离的度量方式

(四)降序排列
这个没什么好说的,就是降序排列,其实升序排列更好。

(五)找数目最多的类
这一步非常重要,最简单的方式就是数个数,哪一类的个数多那么就是哪一类。

另外一种方式是加权
为每个点的距离增加一个权重,使得距离近的点可以得到更大的权重。
那么该怎么加权呢?
这就是我们要讲的第二大点:加权kNN

二、加权kNN(Weighted kNN)

(一)加什么权?

1 反比例函数

weight = 1 / (distance + const)

完全一样或非常接近的权重会很大甚至无穷大。基于这样的原因,在距离求倒数时,在距离上加一个常量const。
这种方法的潜在问题是,它为近邻分配很大的权重,稍远一点的会衰减的很快。虽然这种情况是我们希望的,但有时候也会使算法对噪声数据变得更加敏感。

2 高斯函数
高斯函数比较复杂,但克服了前述函数的缺点,其形式:
高斯函数
其中a,b,c∈R
其图像为:
高斯函数
效果很好,能够克服缺点,最大也就顶点值,再小也不为0,因此可以一定程度上克服噪声带来的影响。

(二)怎么加权

将各个类预测的权重值相加,哪个类最大,就属于哪个类。

就是在对每一类计数的时候,加的不是1二是权重

假如k=3
三个类别分别为A、A、B
一般来讲,A有2个,B有1个,那么判别结果为A

加权情况下,三个邻近的权重分别为A(0.8),A(0.6),B(0.5)
相当于最后有0.8+0.6=1.4(个)A,0.5(个)B,所以最后选A。

三、总结

  1. kNN很简单,是数据分析、模式识别的基础和入门
  2. kNN每预测一个新样本的所属类别时,都会对整体样本进行遍历,可以看出kNN的效率实际上是十分低下的。
  3. 代码就不贴了,网上太多了,写下来也是提醒一下自己。

参考资料:

  1. https://www.cnblogs.com/bigmonkey/p/7387943.html
  2. https://blog.csdn.net/weixin_40639095/article/details/97264166
  3. https://www.cnblogs.com/jyroy/p/9427977.html
  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值