【ML算法】监督学习——KNN算法
2017-11-20 11:14
225 查看
前言
好久没有更新博客啦,罪过罪过,最近生病了,一直在休养,希望广大程序员朋友们一定要注意身体,少熬夜呀~今天又重新温习了一边KNN算法,整理出这篇文章。算法介绍
KNN(k-nearest neighbor,k近邻)是一种基本的分类与回归算法,是监督学习算法,这个算法并不具有显示的学习过程,其输入为特征向量,输出为实例类别,输出的类别可以为多类,最终通过多数表决的方式进行预测。k值的选择、距离测度和分类决策规则是KNN的三个基本要素。输入:训练数据集为T
T={(x1,y1),(x2,y2),⋯,(xN,yN)}T={(x1,y1),(x2,y2),⋯,(xN,yN)}
其中, xi∈χ⊆Rnxi∈χ⊆Rn 为特征向量,yi∈Y={c1,c2,⋯,cK}yi∈Y={c1,c2,⋯,cK} 为实例类别,i=1,2,3,⋯,Ni=1,2,3,⋯,N 。
输出:实例x所属类y。
(1)根据距离测度,在训练集T中找到与x最接近的k个点,涵盖这k个点的x的领域记作 Nk(x)Nk(x) ;
(2)在 Nk(x)Nk(x) 中根据分类决策规则决定x的类别y:
y=argmax∑xi∈N−K(x)I(yi=cj),i=1,2,⋯,N;j=1,2,⋯,Ky=argmax∑xi∈N−K(x)I(yi=cj),i=1,2,⋯,N;j=1,2,⋯,K
其中,I为指示函数,当 yi=cjyi=cj 时I为1,否则为0。
K值的选择
k值的选择会对算法结果产生重大影响。如果选择较小的k值,就意味着仅会选择很小的邻域点进行训练,换句话说,只有与输入较近的训练样本点才会对算法输出有影响,因此这种情况下学习的近似误差会很小,但是模型估计误差会很大,因为模型对距离较近的邻域的点很敏感,如果这些点中存在噪声,那么模型准确率会迅速下降,也就是说,小的k值就意味着较为复杂的模型,输出结果过于依赖邻域中的几个点,这样就容易发生过拟合。如果选择的k值较大,就意味着需要很大的邻域点进行训练,模型对于大多数点都具有依赖性,这种情况下,模型的估计误差会减小,但是近似误差会增大,因为训练的邻域中可能会有很多样本点的类别与输入不同,也就是说,大的k值就意味着较为简单的模型,输出结果会受到很多样本点的影响(其中可能有很大一部分样本点与输入并不属于同一类别),这样就容易发生欠拟合。
特殊情况,如果令k=N,模型未考虑数据的多样性,输出结果永远都是模型中类别频数最大的项。
在实际应用中,通常会选取较小的k值,然后通过交叉验证来减轻过拟合。
距离测度
距离测度在KNN、聚类中经常会遇到,常见的有欧式距离、马氏距离、明氏距离、汉明距离、曼哈顿距离等,本文中介绍其中几种。空间中两个实例点的距离是两个点相似程度的反应。KNN中的特征空间一般为n维实数向量空间 RnRn ,最常使用的是欧式距离,也可以使用 LpLp 距离。
设特征空间 χχ 是n维实数向量空间 RnRn , xi,xj∈χ,xi=(x1i,x2i,⋯,xni)T,xj=(x1j,x2j,⋯,xnj)T,xi,xj的Lpxi,xj∈χ,xi=(xi1,xi2,⋯,xin)T,xj=(xj1,xj2,⋯,xjn)T,xi,xj的Lp 距离定义为:
Lp(xi,xj)=(∑l=1n|xli−xlj|P)1p,p≥1Lp(xi,xj)=(∑l=1n|xil−xjl|P)1p,p≥1
当p=1时,称为曼哈顿距离:
L1(xi,xj)=∑l=1n|xli−xlj|L1(xi,xj)=∑l=1n|xil−xjl|
当p=2时,称为欧式距离:
Lp(xi,xj)=(∑l=1n|xli−xlj|2)12Lp(xi,xj)=(∑l=1n|xil−xjl|2)12
当 p=∞p=∞ 时,它是各个坐标距离的最大值:
L1(xi,xj)=maxl|xli−xlj|L1(xi,xj)=maxl|xil−xjl|
分类决策规则
KNN算法多采取多数表决原则,即哪个类别投票的频数多,样本点就属于哪个类别,假设分类的损失函数为0-1损失函数,分类函数为:f:Rn→{c1,c2,⋯,cK}f:Rn→{c1,c2,⋯,cK}
那么,误差概率为:
P(Y≠f(X))=1−P(Y=f(X))P(Y≠f(X))=1−P(Y=f(X))
于是,对于k个点,误分类率为:
1k∑xi∈NK(x)I(yi≠cj)=1−1k∑xi∈NK(x)I(yi=cj)1k∑xi∈NK(x)I(yi≠cj)=1−1k∑xi∈NK(x)I(yi=cj)
要使误分率最小经验风险最小,就要使 ∑xi∈NK(x)I(yi=cj)∑xi∈NK(x)I(yi=cj) 最大,所以多数表决规则等价于经验风险最小化。
相关文章推荐
- 监督学习_最近邻算法(KNN, k-近邻算法)
- 监督学习之kNN原理解析
- <机器学习实战 >KNN算法 改进约会网站的配对效果
- 【ML算法】监督学习——支持向量机
- knn 第一个学习的深度学习算法
- ML之监督学习算法之分类算法一 ———— k-近邻算法(最邻近算法)
- 1.6 KNN算法学习——KNN算法中超参数的探索
- 机器学习--最邻近规则分类KNN算法
- 【Scikit-Learn 中文文档】十四:多类和多标签算法 - 监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】多类和多标签算法 - 监督学习 - 用户指南 | ApacheCN
- 机器学习---基于KNN算法的数字手写板识别
- 机器学习学习笔记之一:K最近邻算法(KNN)
- 机器学习实战python版归一化数值和测试kNN算法以及构建完整可用系统
- 机器学习笔记(8)---K-近邻算法(6)---KNN算法学习总结
- 数据挖掘学习札记:KNN算法(一)
- 【机器学习】从分类问题区别机器学习类型 与 初步介绍无监督学习算法 PAC
- 小白学数据:教你用Python实现简单监督学习算法
- 学习KNN(二)KNN算法手写数字识别的OpenCV实现
- KNN算法学习--python实现和java实现
- 监督学习的基本思想及最基本算法——梯度下降