K-近邻算法介绍以及代码演示

目录

1.K-近邻算法(KNN)概念

2.k近邻算法api  --Scikit-learn工具

K-近邻算法API

3.距离公式:

 欧式距离

曼哈顿距离

切比雪夫距离

闵可夫斯基距离

4.K近邻算法的K值选取

5. kd树


  

1.K-近邻算法(KNN)概念

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

2.k近邻算法api  --Scikit-learn工具

安装:

pip3 install scikit-learn==0.19.1

K-近邻算法API

  • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
    • n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数

最简单的代码:

#导入模块
from sklearn.neighbors import KNeighborsClassifier

#构造数据集
x = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]

#模型训练
# 实例化API
estimator = KNeighborsClassifier(n_neighbors=1)
# 使用fit方法进行训练
estimator.fit(x, y)

estimator.predict([[1]])

 注:代码由notebook实现,py文件的话需要相应的print进行输出。

3.距离公式:

理解 :多远的距离算近?

 欧式距离

 

曼哈顿距离

 

切比雪夫距离

 

闵可夫斯基距离

其中p是一个变参数:

  • 当p=1时,就是曼哈顿距离;

  • 当p=2时,就是欧氏距离;

  • 当p→∞时,就是切比雪夫距离。

4.K近邻算法的K值选取

  • K值过小
    • 容易受到异常点的影响
  • k值过大:
    • 受到样本均衡的问题

K值选择问题,李航博士的一书「统计学习方法」上所说:

  • 1) 选择较小的K值,就相当于用较小的领域中的训练实例进行预测,
    • “学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,
    • 换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
  • 2) 选择较大的K值,就相当于用较大领域中的训练实例进行预测,
    • 其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误。
    • 且K值的增大就意味着整体的模型变得简单。
  • 3) K=N(N为训练样本个数),则完全不足取,
    • 因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单,忽略了训练实例中大量有用信息。
  • 实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是把训练数据在分成两组:训练集和验证集)来选择最优的K值。

5. kd树

实现k近邻算法时,主要考虑的问题是如何对训练数据进行快速k近邻搜索。

这在特征空间的维数大及训练数据容量大时尤其必要。

k近邻法最简单的实现是线性扫描(穷举搜索),即要计算输入实例与每一个训练实例的距离。计算并存储好以后,再查找K近邻。当训练集很大时,计算非常耗时。

为了提高kNN搜索的效率,可以考虑使用特殊的结构存储训练数据,以减小计算距离的次数。

(可以baidu  to  learn)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值