机器学习-KNN 算法

本文详细介绍了K-Nearest Neighbour(KNN)算法的主要目的、适用性及不足,并给出了算法步骤。讨论了在样本不平衡、计算量大等问题上的解决方案。通过MATLAB和Python代码展示了KNN算法的实现过程,包括数据归一化和使用sklearn库进行测试。最后,文章指出KNN算法在处理非线性边界问题上的优势,以及在特定数据集上取得了0.94的高准确率。
摘要由CSDN通过智能技术生成

                                                                                 K-Nearest Neighbour 

一、主要目的

         在样本空间中,找到与待估计的样本最临近的K个邻居,用这几个邻居的类别来估计待测样本的类别

二、适用性

       样本容量比较大的类域的自动分类,而样本容量较小的类域则容易误分。尤其适用于样本分类边界不规则的情况

三、不足

1、当样本不平衡时,比如一个类的样本容量很大,其他类的样本容量很小,输入一个样本的时候,K个临近值中大多数都是大样本容量的那个类,这时可能就会导致分类错误。改进方法是对K临近点进行加权,也就是距离近的点的权值大,距离远的点权值小。

2、计算量较大,每个待分类的样本都要计算它到全部点的距离,根据距离排序才能求得K个临近点,改进方法是:先对已知样本点进行剪辑,事先去除对分类作用不大的样本。

四、算法步骤:

1)、计算已知类别数据集合汇总的点与当前点的距离
2)、按照距离递增次序排序
3)、选取与当前点距离最近的K个点
4)、确定距离最近的前K个点所在类别的出现频率
5)、返回距离最近的前K个点中频率最高的类别作为当前点的预测分类

五、matlab 代码实现


注意:不同的K取值,会影响分类的准确率。

六、数据归一化

         newData = (oldData-minValue)/(maxValue-minValue)

七、python 代码实现

from numpy import *
import operator
def createDataSet():
  group = array([[ 1.0 , 1.1 ],[ 1.0 , 1.0 ],[ 0 , 0 ],[ 0 , 0.1 ]])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值