k最邻近算法——加权kNN

摘要:
加权kNN在上一篇文章中,提到给每个点的距离加一个权重,这样最近的点可以获得更大的权重。这里我们描述如何称重。下图显示了高斯函数和其他函数之间的差异。当其他功能的距离增加到一定程度时,权重降至0或以下。计算过程中的加权kNN首先获得排序后的距离值,然后取最近的k个元素。计算总和后,将其除以所有权重的总和。当预测新样本的类别时,将遍历整个样本。可以看出,kNN的效率实际上非常低。
加权kNN

  上篇文章中提到为每个点的距离增加一个权重,使得距离近的点可以得到更大的权重,在此描述如何加权。

反函数

  该方法最简单的形式是返回距离的倒数,比如距离d,权重1/d。有时候,完全一样或非常接近的商品权重会很大甚至无穷大。基于这样的原因,在距离求倒数时,在距离上加一个常量:

  weight = 1 / (distance + const)

  这种方法的潜在问题是,它为近邻分配很大的权重,稍远一点的会衰减的很快。虽然这种情况是我们希望的,但有时候也会使算法对噪声数据变得更加敏感。

高斯函数

  高斯函数比较复杂,但克服了前述函数的缺点,其形式:

k最邻近算法——加权kNN第1张

  其中a,b,c∈R

  高斯函数的图形在形状上像一个倒悬着的钟。a是曲线的高度,b是曲线中心线在x轴的偏移,c是半峰宽度(函数峰值一半处相距的宽度)。

k最邻近算法——加权kNN第2张

半峰宽度

k最邻近算法——加权kNN第3张

k最邻近算法——加权kNN第4张

def gaussian(dist, a=1, b=0, c=0.3):
    return a * math.e ** (-(dist - b) ** 2 / (2 * c ** 2))

  上面的高斯函数在距离为0的时候权重为1,随着距离增大,权重减少,但不会变为0。下图是高斯函数和其它几个函数的区别,其它函数在距离增大到一定程度时,权重都跌至0或0以下。

k最邻近算法——加权kNN第5张

计算过程

  加权kNN首先获得经过排序的距离值,再取距离最近的k个元素。

  1.在处理离散型数据时,将这k个数据用权重区别对待,预测结果与第n个数据的label相同的概率:

k最邻近算法——加权kNN第6张

  2.在处理数值型数据时,并不是对这k个数据简单的求平均,而是加权平均:通过将每一项的距离值乘以对应权重,让后将结果累加。求出总和后,在对其除以所有权重之和。

k最邻近算法——加权kNN第7张

  Di代表近邻i与待预测值x的距离,Wi代表其权重,f(x)是预测的数值型结果。每预测一个新样本的所属类别时,都会对整体样本进行遍历,可以看出kNN的效率实际上是十分低下的。


   出处:微信公众号 "我是8位的"

   本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途! 

   扫描二维码关注作者公众号“我是8位的”

k最邻近算法——加权kNN第8张

免责声明:文章转载自《k最邻近算法——加权kNN》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IntelliJ IDEA 2018.3 永久激活 破解[Windows]SQL必知必会下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OpenCV中的KNN

一、K近邻 有两个类,红色、蓝色。我将红色点标记为0,蓝色点标记为1。还要创建25个训练数据,把它们分别标记为0或者1。Numpy中随机数产生器可以帮助我们完成这个任务 import cv2 import numpy as np import matplotlib.pyplot as plt # 包含25个已知/训练数据的(x,y)值的特征集 train...

Java实现 LeetCode 528 按权重随机选择(TreeMap)

528. 按权重随机选择 给定一个正整数数组 w ,其中 w[i] 代表位置 i 的权重,请写一个函数 pickIndex ,它可以随机地获取位置 i,选取位置 i 的概率与 w[i] 成正比。 说明: 1 <= w.length <= 10000 1 <= w[i] <= 10^5 pickIndex 将被调用不超过 1000...

gaussian算子

https://www.cnblogs.com/wangguchangqing/p/6407717.html https://blog.csdn.net/godadream/article/details/81568844   数值图像处理中,高斯滤波主要可以使用两种方法实现。一种是离散化窗口滑窗卷积,另一种方法是通过傅里叶变化。最常见的就是滑窗实现,只有...

KNN算法源代码

import pandas as pdimport osdef creatcatesdir(data, target):# 获取去重后的分类列表 cates = list(data['channelName'].unique())# 打印类别 print(cates)# 建立类别文件夹 for cate in cates:# 拼接子目录路...

零基础入门深度学习(5)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,《零基础入门深度学习》系列文章旨在讲帮助爱编程的你从零基础达到入门级水平。零基础意味着你不需要太多的数学知识,只要会写程序就行了,...

论文阅读笔记(七十二)【ICMR2020】:Compact Network Training for Person ReID

Introduction 对HA-CNN的改进版。 Methods (1) 训练策略: ① Weighted triplet loss with Soft margin: 最初的triplet loss为: Batch-hard triplet loss选择了难样本对进行损失计算: batch-hard的缺点是:对异常样本敏感,硬选择策略可能会丢失重要...