k--最近邻算法(KNN)
目录
一、简介
二、举例理解
三、算法步骤
四、其他说明
1、关于距离的计算
2、超参数
3、关于K值的选择
4、取K值的方法
5、关于决策依据
6、优缺点
五、代码
一、简介
邻近算法(KNN)是数据挖掘分类技术最简单的方法之一,所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个临近值来代表。
如果一个样本在特征空间中的K个最相邻的样本中大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。KNN方法在类别决策时,只与极少量的相邻样本有关。由于KNN算法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来判断所属类别的,因此对于类域的交叉,或重合较多的样本集来说,KNN方法较其他方法更加适合。
二、举例理解
我们需要确定绿点属于哪个颜色(蓝色或者红色),要做的就是选出距离目标点距离最近的k个点,看这k个点的大多数颜色是什么颜色。以绿点为圆心做圆,可以直观地看到其他样本与其目标点距离大小的排序,当k取3的时候,我们可以看出距离最近的三个,分别是红色,红色,蓝色,因此得到目标点为红色;但当k取5时,我们可以看出距离最近的五个,分别是红色,红色,蓝色,蓝色,蓝色,所以得到的目标点为蓝色,因此我们可以知道k的取值不同,得到的结果也是不同的。
三、算法步骤
1、计算测试数据与各个训练数据之间的距离
2、按照距离的递增顺序进行排序
3、选取距离最小的K个点
4、确定前K个点所在类别的出现频率
5、返回前K个点中出现频率最高的类别(决策依据方法之一)作为预测数据的分类
四、其他说明
1、关于距离的计算
1、闵可夫斯基距离
2、欧几里得距离(其实相当于购股定理)
3、曼哈顿距离
4、切比雪夫距离
5、马氏距离
6、余弦相似度
7、皮尔逊相关系数
8、汉明距离
9、杰卡德相似系数
10、编辑距离
11、DTW距离
12、KL散度
2、超参数
在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的效能和效果。
3、关于K值的选择
K称为邻近数,即在预测目标点时取几个邻近的点来预测。
K值的选取非常重要:
1、如果K值选取过小时,一些有噪声的成分存在就会对预测产生比较大的影响,例如K值取1时,一旦最近一个点是噪声,那么就会出现偏差,K值的减少就意味着整体模型变得复杂,容易发生过拟合;
2、如果K值取得过大时,就相当于用较大邻域中的训练实例进行预测,学习的近似误差会增大。这时与输入目标点较远实例也会对预测起作用,使预测发生错误。K值增大就意味着模型变得简单,也就是容易发生欠拟合。
3、如果K=N时,那么就是取全部的实例,即为取实例中某分类下最多的点,就对预测没有什么实际意义了。
4、取K值的方法
1、从K=1开始,使用检验集估计分类器的误差率。重复该过程,每次K增值1,允许增加一个近邻,选取产生最小误差的K。
2、一般K的取值不超过20,上限是n的平方,随着数据集的增大,K的值也要增大。
3、K的取值尽量选取奇数以保证在计算结果最后会产生一个较多的类别,如果取偶数可能会产生相等的情况,不利于预测。
5、关于决策依据
最常用的决策规则是:
1、多数表决法(更加常用):多数表决法类似于一个投票的过程,也就是在K个邻居中选择类别最多的种类作为测试样本的类别。
2、加权表决法:根据距离的远近,对近邻的投票进行加权,距离越近,加权越大。通过权重计算结果最大值的类为测试样本的类别。
6、优缺点
优点:
1、简单好用,容易理解。精度高,理论成熟,既可以用来分类也可以用来回归。
2、可用于数值型数据和离散型数据。
3、训练时间复杂度为o(n),无数据输入假定。
4、对异常值不敏感。
缺点:
1、计算复杂度高,时间复杂度高。
2、样本不平衡问题(有些样本数量很多,而其他样本数量很少)
3、一般数值很大的时候不用这个,计算量太大,但是单个样本数量又不能太少,否则容易发生误分。
4、无法给出数据内在含义
五、代码
#引库
import numpy as np
import matplotlib.pyplot as plt
from math import sqrt
%matplotlib inline
#原始数据
data=[[1,0.9],[1,1],[0.1,0.2],[0,0.1]]
labels=['A','A','B','B']
test_data=[[0.1,0.3]]
#绘制原始数据散点图
print("------------------------数据准备----------------------")
print("原始数据图像绘制...")
for i in range(len(data)):plt.scatter(data[i][0],data[i][1],color='b')
plt.scatter(test_data[0][0],test_data[0][1],color='r')
plt.show()
#测试数据x=(0.1,0.3)
#采用欧氏距离进行计算
print("------------------------距离计算----------------------")
x=[[0.1,0.3]]
distance=[]
labels_vz=[]
for i in range(len(data)):d=0d=sqrt((x[0][0]-data[i][0])**2+(x[0][1]-data[i][1])**2)distance.append(d)labels_vz.append(i)
print("计算的距离为:\n",distance)
print("现在对应的标签位置为:\n",labels_vz)
#按照升序排序,并取距离最小的前3个
print("-----------------------距离排序-----------------------")
for i in range(len(data)-1):for j in range(i+1,len(data)):if distance[i]>distance[j]:distance[i],distance[j]= distance[j],distance[i]labels_vz[i],labels_vz[j]= labels_vz[j],labels_vz[i]
print("排序后的距离为:\n",labels_vz)
print("取距离最近的3个值:",distance[0:3])
#进行投票表决
print("-----------------------表决投票-----------------------")
A=0
B=0
for i in range(len(labels_vz[0:3])):if labels[labels_vz[i]]=='A':A+=1else:B+=1
print("投票为A的数量为:",A)
print("投票为B的数量为:",B)
print("\n对照初始图中红色点(测试点)与前两个标签为A的离的最近,所以我们的计算与图中所呈现的绘图一致")
k--最近邻算法(KNN)相关推荐
- python机器学习案例系列教程——K最近邻算法(KNN)、kd树
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 K最近邻简介 K最近邻属于一种估值或分类算法,他的解释很容易. 我们假设一个人的优秀成为设定为1.2.3.4.5.6.7.8.9.10 ...
- 基于改进的k最近邻算法的单体型重建问题An Improved KNN Algorithm for Haplotype Reconstruction Problem
基于改进的k最近邻算法的单体型重建问题 An Improved KNN Algorithm for Haplotype Reconstruction Problem DOI: 10.12677/csa ...
- KNN算法(K最近邻算法)详解
K 最近邻的核心数学知识是距离的计算和权重的计算.我们把需要预测的点作为中心点,然后计算其周围一定半径内的已知点距其的距离,挑选前 k 个点,进行投票,这 k 个点中,哪个类别的点多,该预测点就被判定 ...
- 基于KD树的K近邻算法(KNN)算法
文章目录 KNN 简介 KNN 三要素 距离度量 k值的选择 分类决策规则 KNN 实现 1,构造kd树 2,搜索最近邻 3,预测 用kd树完成最近邻搜索 K近邻算法(KNN)算法,是一种基本的分类与 ...
- 算法基础:k最近邻算法
本博客所有内容均整理自<算法图解>,欢迎讨论交流~ 了解过机器学习这个概念,一定知道有一种名为k最近邻的算法,简称KNN. 对于k最近邻算法的定义,百度百科是这样给出的:K最近邻(k-Ne ...
- k近邻算法 (KNN)
k近邻算法 k近邻算法(KNN,K-NearestNeighbor)是一种基本分类和回归方法,监督学习算法,本质上是基于一种数据统计的方法: 核心思想:给定一个训练数据集,对新的输入实例,在训练数据集 ...
- 机器学习:k邻近算法(KNN)
title: 机器学习:k邻近算法(KNN) date: 2019-11-16 20:20:41 mathjax: true categories: 机器学习 tags: 机器学习 什么是K邻近算法? ...
- k近邻算法(KNN)-分类算法
k近邻算法(KNN)-分类算法 1 概念 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. k-近邻算法采用测量不同特征值之间的 ...
- 01 K近邻算法 KNN
01 K近邻算法 KNN k近邻算法基础 等价于 scikit-learn中的机器学习算法封装 训练数据集,测试数据集 分类准确度 超参数 考虑距离权重 更多关于距离的定义 搜索明可夫斯基距离相应的p ...
- KNN(K最近邻算法)的详细介绍
KNN(最近邻算法)的最详细介绍 一.KNN算法的基本介绍 二.KNN算法的基本思想 三.基于sklearn实现KNN(基于iris数据) 四.非基于sklearn实现KNN(基于iris数据) 五. ...
最新文章
- 爬虫之selenium控制浏览器执行js代码
- Docker(二)-在Docker中部署Nginx实现负载均衡(视频)
- ES6新特性_ES6扩展运算符的介绍---JavaScript_ECMAScript_ES6-ES11新特性工作笔记013
- v9更新系统后为何显示服务器连接,V9服务器
- 王者荣耀AI即将上线,队友再也不用担心你掉线了
- 计算机毕业设计中用Java 实现系统权限控制
- [原创]网站HTML,XHTML,XML,WML,CSS等测试验证工具介绍
- 解决Ionic的ion-slide-box 2条数据渲染问题
- IIS7程序发布后 之 报图表处理程序配置 [c:\TempImageFiles\] 中的临时目录无效
- Mybatis 常用开发注解(批量插入)
- AMOS分析技术:二阶验证性因子分析
- 解决谷歌浏览器 Google Chrome不能拖拽安装离线插件的办法
- 手机控制电脑之手机端模拟鼠标滑动处理
- 人工智能个性化和逼真的漫画素描生成输入人脸图像创建漫画照片
- iOSApp是如何启动的
- 服务器端安装conda | 配置conda环境
- 删除控制面板里面的java
- [改善脑力的23条方法]
- python pop3lib连接网易企业邮箱
- 谐音法巧记计算机英语单词,经典记忆法,巧记英语单词,简单又有趣
热门文章
- 在Linux环境下怎么编译Android源码?
- DevEco IDE 华为全系列远程真机免费调测
- 学好MySQL增删查改,争取不做CURD程序员【上篇】
- 基于Matlab2012a的LineStretcher测线编号程序开发
- 从“来现场POC”到“去线下店体验”:我的数据治理产品选型经历
- NPN和PNP 的电流方向 、大小关系 、电压偏置
- Buffon's Needle An Analysis and Simulation------蒙特卡洛法模拟蒲丰(Buffon)投针实验-使用Matlab
- PX4 Position_Control RC_Remoter引入
- 页码怎么设置从某一页位置开始,word文档如何设置开始页面
- 搭建一整套电销机器人系统需要哪些技术和资源