机器学习算法手撕系列(一)----K-近邻算法(KNN)

一.k近邻基本介绍

(1)算法原理

       knn算法是一个有监督机器学习算法,可以解决分类问题,也可以解决回归问题.核心思想是未标记样本的类别,由距离其最近的k个邻居投票来决定.

       假设我们有一个已经标记的数据集,即已经知道了数据集中每个样本所属的类别,此时,有一个未标记的数据样本,我们的任务是预测这个数据样本所属的类别,其基本原理是,计算待标记的数据样本和数据集中每个样本的距离,取距离最近的k个样本.待标记的数据样本所属的类别,就有这k个距离最近的样本投票产生.

       假设X_test为待标记的数据样本,X_train为已标记的数据集,伪代码如下:

  • 遍历X_train中的所有样本,计算每个样本与X_test的距离,并把距离保存在Distance数组中
  • 对Distance数组进行排序,取距离最近的k个点,记为X_knn
  • 在X_knn中统计每个类别的个数,即class0在X_knn中有几个样本,class1在X_knn中有几个样本等
  • 待标记样本的类别,就是X_knn中样本个数最多的那个类别.       

(2)算法优缺点

优点:准确性高,对异常和噪声有较高的容忍度

缺点:计算量较大,对内存需求也较大,从算法原理可以看出,每次对一个未标记样本进行分类时,都需要全部计算一遍距离.

(3)算法参数

其算法参数为k,参数选择需要根据数据来决定,k值越大,模型的偏差越大,对噪声数据越不敏感,当k值很大时,可能造成模型欠拟合,k值越小,模型方差越大,当k值过小,就会造成模型过拟合

(4)算法的变种

k-邻近算法变种有如下几种;

1.增加邻居的权重,默认情况下,在计算距离时,都是使用相同权重,事实上,我们可以针对不同的邻居指定不同的距离权重,如距离越近,权重越高,这个可以通过指定算法的weights参数来实现

2.使用一定半径内的点取代距离最近的k个点,在scikit-learn里,RadiusNeighborsClassfier类实现了这个算法的变种,当数

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值