文章目录

  • KNN思想
    • 具体实现
  • References

KNN思想

分类思想:输入x,计算它和已知数据集之间中样本的距离,将距离进行升序排列,输出前k个距离,输出前k个结果中类别最多的一类,就是x的所属类别。

回归思想:对前k个样本输出的平均值作为回归预测值

关键点:

  • k值的选取:可以先选择一个较小的值,再交叉验证

    • k值大,训练误差会增大,泛化误差减小,模型变简单
    • k值小,训练误差会减小,泛化误差会增大,模型变复杂,容易过拟合
    • 当k=m(样本数)会输出样本中最多的类

距离度量的选择:

  • 欧式距离: 对于两个n维向量x和y

  • D ( x , y ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + … + ( x n − y n ) 2 = ∑ i = 1 n ( x i − y i ) 2 D(x, y)=\sqrt{\left(x_{1}-y_{1}\right)^{2}+\left(x_{2}-y_{2}\right)^{2}+\ldots+\left(x_{n}-y_{n}\right)^{2}}\\=\sqrt{\sum_{i=1}^{n}\left(x_{i}-y_{i}\right)^{2}} D(x,y)=(x1​−y1​)2+(x2​−y2​)2+…+(xn​−yn​)2 ​=i=1∑n​(xi​−yi​)2 ​

  • 曼哈顿距离:对于两个n维向量x和y

  • D ( x , y ) = ∣ x 1 − y 1 ∣ + ∣ x 2 − y 2 ∣ + … + ∣ x n − y n ∣ = ∑ i = 1 n ∣ x i − y i ∣ D(x, y)=\left|x_{1}-y_{1}\right|+\left|x_{2}-y_{2}\right|+\ldots+\left|x_{n}-y_{n}\right|\\=\sum_{i=1}^{n}\left|x_{i}-y_{i}\right| D(x,y)=∣x1​−y1​∣+∣x2​−y2​∣+…+∣xn​−yn​∣=i=1∑n​∣xi​−yi​∣

  • 分类决策的规则:多数表决法,k最好选择奇数,不然有相同的结果

knn优点

  1. KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练
  2. 理论成熟,思想简单,既可以用来做分类又可以做回归

knn缺点:

  1. 计算量大,尤其是数据集非常大的时候
  2. 样本不平衡的时候,对稀有类别的预测准确率低
  3. KD树,球树之类的模型建立需要大量的内存
  4. k值大小的选择很重要

具体实现

步骤

  • 构建数据集(自建或者下载)
  • 计算预测样本和已知样本的距离,输出前k个距离
  • 对计算的distance 升序排列
  • 输出前k个样本的labels
  • 输出类别最多的一类
# 导入库
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection  import train_test_split# 构建数据集
dataset = load_iris()
X = dataset.data
y = dataset.target
X_train,X_test,y_train,y_test = train_test_split(X,y,train_size = 0.7,random_state = 777)
y_test.shape[0]def KNN_EUdist(X_test,X_train,y_train,k):# initializationnum_test = X_test.shape[0]y_pred = np.zeros(X_test.shape[0])# 计算每个预测样本和训练集样本的距离for i in range(num_test):d = np.sum((X_test[i]-X_train)**2,axis=1) # 欧式距离,按行求和d = np.sqrt(d) #开方#d = np.sum(np.abs((X_test[i]-X_train)),axis=1) # 曼哈顿距离,按行求和d_k_index = np.argsort(d)[:k] #升序排序后直接返回indexpred_k_label = y_train[d_k_index]y_pred[i] = np.argmax(np.bincount(pred_k_label.tolist())) #返回类别最多的一类return y_preddef acc(y_pred,y_test):
'''计算KNN_EUdist()准确率
'''num_test = y_test.shape[0]cnt = 0for i in range(num_test):if y_pred[i] == y_test[i]:cnt +=1#print(y_pred[i],y_test[i])else: passaccuracy = cnt/num_test return accuracyy_pred = KNN_EUdist(X_test,X_train,y_train,k)
acc(y_pred,y_test)
>>>0.97

References

[1] K近邻法(KNN)原理小结-刘建平 https://www.cnblogs.com/pinard/p/6061661.html
[2] knn部分总结 https://github.com/zhengjingwei/machine-learning-interview#2-2-1

ML code | KNN python实现相关推荐

  1. ML之kNN(两种):基于两种kNN(平均回归、加权回归)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能

    ML之kNN(两种):基于两种kNN(平均回归.加权回归)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能 目录 输出结果 设计思路 核心代码 输出结果 Bosto ...

  2. ML之kNN:k最近邻kNN算法的简介、应用、经典案例之详细攻略

    ML之kNN:k最近邻kNN算法的简介.应用.经典案例之详细攻略 目录 kNN算法的简介 1.kNN思路过程 1.1.k的意义 1.2.kNN求最近距离案例解释原理-通过实际案例,探究kNN思路过程 ...

  3. ML之k-NN:k-NN实现对150朵共三种花的实例的萼片长度、宽,花瓣长、宽数据统计,根据一朵新花的四个特征来预测其种类

    ML之k-NN:k-NN实现对150朵共三种花的实例的萼片长度.宽,花瓣长.宽数据统计,根据一朵新花的四个特征来预测其种类 目录 输出结果 实现代码 输出结果 实现代码 from sklearn im ...

  4. mac 打开html c python,在Mac系统使用Visual Studio Code运行Python的方法

    在Mac系统使用Visual Studio Code运行Python的方法 发布时间:2020-08-10 10:29:31 来源:亿速云 阅读:105 作者:小新 在Mac系统使用Visual St ...

  5. python 实现点击右键用某个程序打开功能_4.PYTHON开发利器之使用VS Code进行python程序开发...

    0. 前言 VS Code是一个轻量级工具,适合于简单的编辑.编译.运行Python程序,特别是在学习Python语言的时候: 如果需要开发Python项目,建议选择使用专门的Python IDE - ...

  6. VS Code运行Python程序

    相比 PyCharm.Eclipse+PyDev,使用 VS Code 编写 Python 程序,不用创建项目,直接创建 Python 文件即可. VS Code创建Python文件 首先,打开 VS ...

  7. vs code 开发企业级python_基于VS Code配置Python开发环境

    学习Python也有一段时间了,总感觉学的比较零碎,不成系统,我想应该是因为我没有及时对学习过程进行记录,主要是懒,呵呵~~~那好,以后就在这个平台记录下python学习的点滴吧. 所谓"工 ...

  8. vscode可以打开jupyternotebook吗_刚刚,官方宣布 VS Code 支持 Python 全开发了!

    关注Python高校 每天早上23:10准时推送 北京时间 2019 年 9 月 21 日,PyCon China 2019 在上海举行. 在下午的演讲中,来自微软开发工具事业部的资深研发工程师韩骏做 ...

  9. 使用Visual Studio Code设置Python开发环境

    目录 布局 Windows集中式安装 假设与要求 在Windows上安装 安装VS代码 安装VS代码扩展 在Windows上设置Python开发环境 安装Python 创建一个虚拟环境 创建项目和设置 ...

最新文章

  1. TikTok游戏话题浏览上涨,预示出海新机会
  2. java io null异常,java.io.IOException:所有收集器的初始化失败。最后一个收集器中的错误是:null...
  3. 数据采集技术python网络爬虫答案_高校邦网络数据采集与Python爬虫【带实验】章节答案...
  4. 新版知识付费系统付费阅读小程序源码知识付费平台
  5. 计算机游戏有哪几种,这些游戏你玩过几个? 你认为最经典的电脑游戏有哪些?
  6. 范伟导老师Sniffer课程资料
  7. 天津大学材料与化工考研考情与难度、参考书及上岸前辈备考经验
  8. java学习笔记——IO流
  9. 2021年中国PLG模式的SaaS公司新增的有哪些代表?
  10. 关于逆序的一些基本操作
  11. API(15)——打印系统开发(52)——WinForm开发(62)——C#通过调用WinApi打印PDF文档类,服务器PDF打印、IIS PDF打印
  12. 数据结构6-1:什么是图
  13. ubuntu14.04系统假死及强制关机后产生的问题解决
  14. shell全面入门教程--IT隐匿者
  15. 3.云计算基础篇---云计算优势
  16. android实时监控屏幕代码,Android 屏幕切换监听的实例代码
  17. python异常处理输入不是整数_【Python】异常处理
  18. 拒绝白嫖,著名开源项目作者暴力删库,导致账号被封!
  19. 计算机职业与个人素质的关系,论高职计算机专业学生综合素质和职业技能与就业的关系...
  20. 蓝桥杯第五届省赛模拟试题--“模拟智能灌溉系统”

热门文章

  1. 数据结构课程设计【C++实现】
  2. 【SQL 解决鸡兔同笼问题】
  3. 【论文阅读】Online Attention Accumulation for Weakly Supervised Semantic Segmentation
  4. 公网异地远程访问家中/公司的群晖NAS
  5. 51单片机实验之流水灯和交替闪烁
  6. 客户机加入域环境的前提条件
  7. Jsp物流信息网建设(源代码+论文)
  8. 安装了向日葵或TeamViewer导致系统亮度无法调节
  9. iOS自动打包,并上传蒲公英
  10. RuntimeError: cuda runtime error (77)