Matlab学习系列22. KNN算法

Matlab学习系列22. KNN算法

ID:39682671

大小:357.97 KB

页数:6页

时间:2019-07-09

Matlab学习系列22. KNN算法_第1页
Matlab学习系列22. KNN算法_第2页
Matlab学习系列22. KNN算法_第3页
Matlab学习系列22. KNN算法_第4页
Matlab学习系列22. KNN算法_第5页
资源描述:

《Matlab学习系列22. KNN算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、21.KNN算法KNN算法又称为k近邻分类(k-nearestneighborclassification)算法,是从训练集中找到和新数据最接近的k条记录,然后根据他们的主要分类来决定新数据的类别。该算法涉及3个主要因素:训练集、距离或相似的衡量、k的大小。一、算法要点1.指导思想其指导思想是“近朱者赤,近墨者黑”,由你的邻居来推断出你的类别。2.算法步骤:1)算距离:计算已知类别数据集合汇总的点与当前点的距离,按照距离递增次序排序;2)找邻居:选取与当前点距离最近的K个点;3)做分类:确定距离最近的前K个点所在类别的出现频率,返回距离最近的前K个

2、点中频率最高的类别作为当前点的预测分类。3.k值设定为多大?k太小,分类结果易受噪声点影响;k太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)k值通常是采用交叉检验来确定(以k=1为基准)经验规则:k一般低于训练样本数的平方根2.距离或相似度的衡量什么是合适的距离衡量?距离越近应该意味着这两个点属于一个分类的可能性越大。常用的距离衡量包括欧氏距离、夹角余弦等。对于文本分类来说,使用余弦(cosine)来计算相似度就比欧式(Euclidean)距离更合适。高维度对距离衡量的影响:众所周知当变量数越多,欧氏距离的区分能力

3、就越差。变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化。3.类别的判定投票决定:少数服从多数,近邻中哪个类别的点最多就分为该类。加权投票法:根据距离的远近,对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)。投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。4.优缺点1)优点简单,易于理解,易于实现,无需估计参数,无需训练。适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构造流失预测模型)。特别适合于多分类问题(multi-mo

4、dal,对象具有多个类别标签),例如根据基因特征来判断其功能分类,kNN比SVM(支持向量机)的表现要好。2)缺点懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢。可解释性较差,无法给出决策树那样的规则。二、Matlab实现KNN.mfunctionrelustLabel=KNN(test,train,trainlabels,k,type)%%test为一条输入测试数据,train为样本数据,trainlabels为样本标签,选取k个临近值row=size(train,1);forj=1:rowswitchtypecase1%求test到每

5、个样本的欧氏距离distanceMat(j)=sum((test-train(j,:)).^2);case2求test到每个样本的夹角余弦distanceMat(j)=(train(j,:)*test')/(norm(train(j,:),2)*norm(test,2));ifdistanceMat(j)<0distanceMat(j)=(distanceMat(j)+1)/2;endendenddistanceMat=distanceMat';[B,IX]=sort(distanceMat,'ascend');%距离从小到大排序len=min(k

6、,length(B));%选k个邻近值,当然k不能超过训练样本个数relustLabel=mode(trainlabels(IX(1:len)));%取众数(即出现频率最高的label)作为返回结果end测试数据(部分):主程序:loaddata;dataMat=data(:,1:3);labels=data(:,4);len=size(dataMat,1);k=4;error=0;%观察可视化数据label1=find(data(:,4)==1);label2=find(data(:,4)==2);label3=find(data(:,4)==3

7、);plot3(data(label1,1),data(label1,2),data(label1,3),'ro');holdonplot3(data(label2,1),data(label2,2),data(label2,3),'go');plot3(data(label3,1),data(label3,2),data(label3,3),'bo');gridon%归一化处理maxV=max(dataMat);minV=min(dataMat);range=maxV-minV;newdataMat=(dataMat-repmat(minV,[l

8、en,1]))./(repmat(range,[len,1]));%测试数据比例Ratio=0.1;numTest=Rat

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。