kkk近邻学习是一种常用的监督学习方法,比如:判断一个人的人品,只需要观察与他来往最密切的几个人的人品好坏就可以得出,即“近朱者赤,近墨者黑”。
理论/原理:“物以类聚,人以群分”
kkk近邻法的工作机制很简单:
1、K值的选择
2、距离度量
3、决策规则
KNNKNNKNN在做回归和分类的主要区别在于最后做预测时的决策方式不同:
(1)分类预测规则:一般采用多数表决法或者加权多数表决法
假设图中“?”表示待预测样本,红色圆表示一类,蓝色方块表示一类,2和3表示到待预测样本的距离
1.多数表决法:
2.加权多数表决法:
图中,双箭头线上的数表示到待预测样本的距离
实现kNN分类算法的伪代码:
对未知类别属性的数据集中的每个点依次执行一下操作:
欧氏距离公式:
d=∑mi=1(xiyi)2√d=\sqrt{\sum_{i=1}^m(x_i-y_i)^2}d=i=1∑m(xiyi)2例如求点(1,0,0,1)(1,0,0,1)(1,0,0,1)和(7,6,9,4)(7,6,9,4)(7,6,9,4)之间的距离:(71)2+(60)2+(90)2+(41)2√\sqrt{(7-1)^2+(6-0)^2+(9-0)^2+(4-1)^2}(71)2+(60)2+(90)2+(41)2
检测分类器效果:
以上算法的实现是用于分类的,决策规则使用了多数表决法;此算法通过改变决策规则,同样可以用于回归。
1、案例1:约会网站的配对效果
样本包括3种特征:
样本包括3种标签:
部分数据格式为:
代码可见:02_约会网站的配对效果.py
2、案例2:手写数字识别系统
如下是0的一种表示:
代码可见:03_手写数字识别系统.py
KNN算法的重点在于找出K个最邻近的点,主要方法如下:
1、蛮力实现(brute)
2、KD树(KD_Tree)
除此之外,还有一些从KD_Tree修改后的求解最邻近点的算法,比如:BallTree、BBFTree、MVPTree等
(1)KD数的构建
\quad\quadKD树采用从mmm个样本的nnn维特征中,分别计算nnn个特征取值的方差,用方差最大的第kkk维特征nkn_knk作为根节点。对于这个特征,选择取值的中位数nkvn_{kv}nkv作为样本的划分点,对于小于该值的样本划分到左子树,对于大于等于该值的样本划分到右子树,对左右子树采用同样的方式找方差最大的特征作为根节点,递归即可产生KD树。
假设二维样本为:{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}\{(2,\3),\(5,\4),\(9,\6),\(4,\7),\(8,\1),\(7,\2)\}{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},下面我们来构建KD树:
xˉ1=2+5+9+4+8+76=5\bar{x}_1=\frac{2+5+9+4+8+7}{6}=5xˉ1=62+5+9+4+8+7=5xˉ2=3+4+6+7+1+26≈3.83\bar{x}_2=\frac{3+4+6+7+1+2}{6}\approx3.83xˉ2=63+4+6+7+1+2≈3.83s2x1=(25)2+(55)2+(95)2+(45)2+(85)2+(75)26=6.5s^2_{x_1}=\frac{(2-5)^2+(5-5)^2+(9-5)^2+(4-5)^2+(8-5)^2+(7-5)^2}{6}=6.5sx12=6(25)2+(55)2+(95)2+(45)2+(85)2+(75)2=6.5s2x2≈4.7s^2_{x_2}\approx4.7sx22≈4.7
方差表示数据的离散程度,离散程度越大,值越大因此,选择第1维特征x1x_1x1作为根节点
x1x_1x1取值为2,4,5,7,8,92,4,5,7,8,92,4,5,7,8,9中位数取7来划分,小于该值的放在左子树,大于该值的放在右子树
(2)KDtree查找最近邻
当我们生成KD树以后,就可以取预测测试集里面的样本目标点了。
假设要寻找点(2,2.5)(2,2.5)(2,2.5)的最近邻点:
1、鸢尾花数据分类
使用Logistic算法和KNN算法对鸢尾花数据进行分类,比较结果;具体内容在代码的注释中有介绍画出下面两张图,需要将代码整合起来,才能画出来。
2、信贷审批
具体内容将代码介绍
可用于分类与回归输入为实例特征向量,输出为类别,可以是多分类没有显示的学习过程,假设给定一个有监督的训练集,新的实例根据最近k个实例的类别多数表决决定属于哪一类利用训练数据对特征空间划分三要素:k值、距离度量、分类规则算法输入:训练集:为输入实例特征向量为实例类别;待分类的实例x。输出实例x所属类别y用给定的距离度量,在T...
一、K近邻算法基础KNN-------K近邻算法--------K-NearestNeighbors思想极度简单应用数学知识少(近乎为零)效果好(缺点?)可以解释机器学习算法使用过程中很多细节问题更完整的刻画机器学习应用的流程kNN的过程二、scikit-learn中的机器学习算法封装KNN/KNNN.pykNN_function...
一、算法介绍监督学习算法分类算法查找与已有数据中最接近的k个类别,分类为出现类别最大概率的类别二、一般流程:三、代码实现:python3中已经废弃iteritems()函数,使用会报错:关键代码如下:使用AnacondaNavigator集成的JupyterLab软件运行:传入参数,请求结果为:详细问题可参考:1.Python3字典中items()和pytho...
1、KNN的基本原理我们通常将机器学习算法分为有监督学习和无监督学习两类,通俗的说,我们会按照训练样本中是否含有标签来区分这两类,KNN算法便是一种适用于带标签的数据场景的算法,我们可以将它归类为一种有监督学习方法。KNN算法,我们给定一个数据集,对于一个新来到的样本,我们在数据集中找到距离该样本最近的K个样本,在这K个样本中某一类出现的次数最多我们就把这个新的样本分到这个类别中。举一个图例...
写在前面K近邻(K-nearestneighbor,k-nn)是一种常用的机器学习监督学习方法,可用于分类和回归问题。其工作机制为:给定测试样本,基于某种距离度量找出训练集中与其最靠近的K个训练样本,然后基于这K个邻居来预测给定样本。对于分类任务,可使用“投票法”;对于回归任务,可使用“平均法”,即取这K个邻居的平均值最为预测结果,进一步地,还可...
一、引入二、KNN算法1.文字描述2.算法过程3.算法优缺点三、KNN模型1.距离度量(Distancemetric)2.k值的选择(Choiceofkvalue)3.分类规则(Classificationdecisionrule)四、总结一、引入可用于分类(二分类/多分类)或者回归,属于监督学习方法1.思想给定测试样本...
1什么是K-近邻算法—KNN1.1k-近邻算法特点也叫KNN算法,是一个非常适合入门的算法,拥有如下特性:*思想极度简单,应用数学知识少(近乎为零)对于很多不擅长数学的小伙伴十分友好,KNN算法几乎用不到数学专业知识*效果好虽然算法简单,但效果也不错缺点也是存在的,后面会进行讲解1.2什么是K-近邻算法上图中的数据点是分布在一个特征空间中:横轴表示肿瘤大小,纵轴...
基本概念k近邻法(k-nearestneighbor,k-NN)是1967年由CoverT和HartP提出的一种基本分类与回归方法。基本概念如下:存在一个样本数据集合,所有特征属性已知,并且样本集中每个对象都已知所属分类。对不知道分类的待测对象,将待测对象的每个特征属性与样本集中数据对应的特征属性进行比较,然后算法提取样本最相似对象(最近邻)的分类标签。一般来说,我们只选择样本数据集中...
对发送/接收的字节数目计数,显示到底部状态栏中。GitHub源码:Qt串口调试助手下载接收字节数计数(1)在mainwindow.h文件中创建收发数属性,再创建两个标签指针,用于显示收发数目。(2)mainwindow.c构造函数中创建两个标签,用于显示收发数量,并将标签添加到底部状态栏中。(3)在串口接收槽函数中,添加接收...
Iamwritingascriptinpythonwhichcanconnecttokarafconsolelikesudo./clientandafterloggingIwanttoseewhatandallbundlesareactivebyusingcommandslikelist|grep-iactive.Iwant...
CananyonehelpIneedtheformulaforCellCExcel'sdocumentationaboutIFfunction:IF(logical_test,[value_if_true],[value_if_false])Inourcase:Therefore:IfyouareusingGoogleSheets,you...
Icurrentlyhaveadotcloudappthatusesdjangotoserveeverything.Itworksgreat,however,werecentlyhadoursiteredoneinangular.js,andIdon'twanttousedjangotoservetheactualhtmlpa...
I'mtryingtofigureouthowtoputmatchedpartofastringtotheendofthestringinphp.Forexample,let'ssaythatwehavestringlikethis:Atfinal,I'dliketoobtainthis:Code:Iknowthat...