KNN-最近邻算法初探

本文首发于我的个人博客网站:https://www.xerrors.fun/knn-algorithm/ 欢迎访问

本文质量不咋地,目的是记录一下自己的代码。还有一个原因是我发现别人的博客写的太好了!

1. KNN 算法

KNN 算法属于监督学习的算法,基本原理是对整个数据整体进行打标签之后,对一个新的元素根据其在向量空间中的位置来对其分类。k近邻算法是在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,我们就说预测点属于哪个类。

KNN本质是基于一种数据统计的方法!其实很多机器学习算法也是基于数据统计的。KNN是一种memory-based learning,也叫instance-based learning,属于lazy learning。即它没有明显的前期训练过程,而是程序开始运行时,把数据集加载到内存后,不需要进行训练,就可以开始分类了。 具体是每次来一个未知的样本点,就在附近找K个最近的点进行投票。参考

2. 重要参数

K 的取值、距离的度量选择、特征归一化

参考【量化课堂】一只兔子帮你理解 kNN

3. 示例代码

尝试用经典的分类学习算法 KNN 最近邻(k-nearest neighbor , 最简单的分类算法, 新的观测值的标签由 n 维空间中最靠近它的训练样本标签确定) 判断萼片长度和宽度、花瓣长度和宽度分别是 5.0cm, 3.0cm, 5.0cm, 2.0cm 的鸢尾花所属类别。

import numpy  as np
from sklearn import datasets
iris = datasets.load_iris()

data = np.array([5.0, 3.0, 5.0, 2.0], dtype='float64')

k = 5

# 获得欧氏距离的数组
l2_array = [(iris.target[i], np.linalg.norm(data-iris.data[i])) for i in range(len(iris.data))]

# 取出最近的 k 个目标
topk = sorted(l2_array, key=lambda a: a[1])[:k]

# 找到个数最多的标签并输出
res = np.argmax(np.bincount([i[0] for i in topk ]))
iris.target_names[res]

参考资料

[1] 量化课堂:一只兔子帮你理解 kNN

[2] 空间向量中各距离的意义

[3] 机器学习之深入理解K-means、与KNN算法区别及其代码实现

[4] 一文搞懂k近邻(k-NN)算法(一)介绍

[5] 一文搞懂k近邻(k-NN)算法(二)KD树

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值