k近邻算法_K近邻分类算法—近朱者赤,近墨者黑

写在前面

01

       近来就从理论层面(没有研究其代码实现)学习了一下K-近邻分类算法,也就是俗称的KNN算法,于是好记性不如烂笔头,在这里做一个整合总结38b8e116ea25198f0d84c9898bf6d3c9.png

       K-近邻分类算法是一种有监督的分类算法。这个算法的指导思想还蛮有意思的,总结来说就是——“近朱者赤,近墨者黑”,更通俗一点的说就是:“你是什么,由你的邻居决定”,是不是细思极恐38b8e116ea25198f0d84c9898bf6d3c9.png

df95fc26b750b53822d800897528273c.png

02

KNN算法定义

       KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,从这个名字我们就能看出猜得一二了。就是说每个样本都可以用它最接近的k个邻居来代表。

       简单来说,K-NN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,给新数据归类。

       如图所示:有两类不同的样本数据,分别用蓝色的小正方和红色的小三角形表示,问题:

图中绿色的小圆圈到底属于哪一类?

ce4e857991d0d7e452ef7009fa51921c.png

      在此图中,如果k=3,绿色圆点的最近的3个邻居:2个是红色小三角形,1个蓝色小正方形,少数服从多数,判定该绿色待分类点属于红色的三角形一类;

如果k=5,绿色圆点的最近的5个邻居:2个是红色小三角形,3个蓝色小正方形,少数服从多数,判定该绿色待分类点属于蓝色色正方形一类;

通过这个例子,我们也可以感受到,k很重要,由于k的不同,待分类的绿色小圆圈会发生变化,后文也会详细的描述k的选择问题。

KNN算法步骤

03

       算法实现过程可以表述为:给定一个未知的样本,k-最邻近分类法搜索模式空间,找出最接近未知样本的k个训练样本,然后使用k个最邻近者中最多的类来预测当前的类标号。

533d7b43fec42ac8f6dbfed1ed77d9a0.png

04

关键点1—k的选择

       前面也说过,k的选择不一致,可以导致训练集的归类不一样。

       如果k 值过小,得到的近邻数过少,会降低分类精度,同时也会放大噪声数据的干扰;

       如果k值过大,会有较大的领域训练样本进行预测,可降低噪音点样本对结果的影响,但是,一些距离比较远的训练样本也会对测试结果有贡献,会把一些并不相似的数据包含进来,影响分类结果,降低预测效果。

       所以如何适当的选择k值呢?

通常,按经验规则:k一般低于训练样本数的平方根;

另一种常见k值的设定法,即采用交叉检验的方式(以k=1为基准)。

注:

交叉验证的概念:有时也称为循环估计,是一种统计学上将数据样本切割较小子集的方法。于是可以先在一个子集上做分析,而其他子集则用来做后续对比分析的确认及验证。开始的仔细被称为训练集,而其他的子集则被称为验证集或者测试集;

交叉验证误差统计选择法就是比较不同k值时的交叉验证平均误差率,选择误差率最小的那个k值。例如选择k=1,2,3,……,对每个k=i做100次交叉验证,计算出平均误差,然后比较、选出最小值。

关键点2—归一化数值

05

      数据的归一化在用KNN算法的时候是很重要的(当然,在其他算法也重要),比如下面一个例子,样例数据如下:

A [(0,20000,1.1),好]

B [(67,3200,0.1),好]

我们现在计算两者的距离:

c5481515d731d25ebfb288ebd28c79b4.png

      可以看出,第二维度的数值对结果影响很大,从而可能导致预测结果错误,为了避免这种影响,在处理这种不同取值范围的特征值时,我们通常采用的方法是将数值归一化。例如可以把取值范围处理为0-1或者-1到1之间,下面的公式可以将任意取值范围的特征值转化为0到1之间:

2c4755629637069b3ce8b296c521abec.png

06

关键点3—距离的度量

计算距离有许多不同的方法,如:

欧几里得距离法

余弦距离(不了解)

汉明距离(听都没听过)

曼哈顿距离(呃……)等等

       而KNN采用的是常用的欧几里得距离,就是我们初中高中课本里常用的计算点与点之间距离的方法。公式表达为:

1d782115bad0a88a3bb1133a18fa9878.png

关键点4—类别的判别

07

      类别的判别一般采用多数表决的方法,即由输入实例的K个最邻近的训练实例中的多数类决定输入实例的类别。除此之外,还有一种分类准确度更高的“加权投票法”,去对输入实例进行分类。

       加权投票法原理是根据距离的远近,对近邻的投票进行加权,给更近的邻居分配更大的比重(你离我更近,那我就认为你跟我更相似,就给你分配更大的权重),而较远的邻居的权重则相应的减少,权重为距离平方的倒数。

08

算法评价

算法优点

  • 理论成熟,思想简单,既可以用来做分类又可以做回归;

  • 可以用于非线性分类;

  • 训练时间复杂度比支持向量机之类的算法低;

  • 对数据没有假设,准确度高,对异常点不敏感

算法缺点

      KNN是一种懒惰算法,平时不好好学习,考试(对测试样本分类)时才临阵磨枪(暂时去找k个近邻)。懒惰的后果:构造模型非常easy。但在对测试样本分类地的系统开销大,由于要扫描所有训练样本并计算距离,实际使用可能非常耗时。不过现在已经有一些方法提高计算的效率(只是我没去了解)。

       还有缺点就是,可解释性不强,无法给出任务数据的基础结构信息,因此没有办法知道平均实例样本和典型样本具有什么特征等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值