knn原理与实践

嘟嘟_猪 嘟嘟_猪     2022-08-08     253

关键词:

knn是一种基本分类与回归方法

应用:knn算法不仅可以用于分类,还可以用于回归..

1、文本分类:文本分类主要应用于信息检索,机器翻译,自动文摘,信息过滤,邮件分类等任务.

2、可以使用knn算法做到比较通用的现有用户产品推荐,基于用户的最近邻(长得最像的用户)买了什么产品来推荐是种介于电子商务网站和sns网站之间的精确营销.只需要定期(例如每月)维护更新最近邻表就可以,基于最近邻表做搜索推荐可以很实时

优点:

1、简单,易于理解,易于实现,无需估计参数,无需训练,选择合适的k,对异常值不敏感;

2、适合于多分类问题(multi-modal,对象具有多个类别标签)

3、可拓展性强,添加新实例无需重新构造模型

缺点:

1、当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数.可以采用权值的方法(和该样本距离小的邻居权值大)来改进.

2、计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点.对于大数据分类,即需要大量的训练样本,计算复杂度高

3、可理解性差,无法给出像决策树那样的规则.

 

距离度量:

1、高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差.

2、变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化.

 

K值选择:目前采用交叉验证方式,选出误差率最小的对应的K

 

构造:

1、随着树的深度增加,循环的选取坐标轴,作为分割超平面的法向量。对于3-d tree来说,根节点选取x轴,根节点的孩子选取y轴,根节点的孙子选取z轴,根节点的曾孙子选取x轴,这样循环下去。

2、每次均为所有对应实例的中位数的实例作为切分点,切分点作为父节点,左右两侧为划分的作为左右两子树。

对于n个实例的k维数据来说,建立kd-tree的时间复杂度为O(k*n*logn)。

搜索:

最近邻搜索如下(k最近邻,搜索k次,每次将上一次最近邻删除)

1、首先从根节点出发找到包含目标点的叶节点,目标点的最近邻一定在以目标点为中心,并通过当前叶节点的超球体内部,

2、然后从该叶节点出发,依次回退到父节点,

3、如果父节点的另一子节点的区域与超球体相交,则到该区域继续查找,不断的查找与目标点最近邻的节点,直到不能查找最近邻的节点为止。

 

############################R语言#########################

library(class)

knn(train,test,cl,k=1,l=0,prob=FALSE,use.all=TRUE)

################################案例###########################################

##############################案例#############################################

library(class)

library(nutshell) ######取数据集spambase做案例#########

library(sampling) ########用抽样函数strata做抽样###################

data(spambase)

spambase.strata<-strata(spambase,stratanames=c("is_spam"),size=c(1269,1951)

,method="srswor") ########变量ID_unit#描述了样本中的行号信息###########

spambase.training<-spambase[rownames(spambase)%in%spambase.strata$ID_unit,]

#####训练集#############

spambase.validation<-spambase[!(rownames(spambase)%in%spambase.strata$ID_unit),]

######验证集###############

spambase.knn<-knn(train=spambase.training,test=spambase.validation,

cl=spambase.training$is_spam)

##########cl:训练数据的响应变量(因子类型)######################

summary(spambase.knn)

table(predicted=spambase.knn,actual=spambase.validation$is_spam)

 

 

####################matlab代码:包含分类与回归#######################

functionrelustLabel=KNN(test,train,trainlabels,k,type) %% test 为一条输入测试数据,train为样本数据,trainlabels为样本标签,选取k个临近值 

    row = size(train,1);

    for j=1:row

        switch type 

            case 1  % 求test到每个样本的欧氏距离 

                distanceMat(j)=sum((test-train(j,:)).^2);

            case 2  %求test到每个样本的夹角余弦               

                distanceMat(j)=(train(j,:)*test')/(norm(train(j,:),2)*norm(test,2)); 

                if distanceMat(j)<0 

                    distanceMat(j)=(distanceMat(j)+1)/2;

                end

        end

    end

    distanceMat=distanceMat'; 

    [B, IX] = sort(distanceMat,'ascend');  %距离从小到大排序

    len = min(k,length(B));  %选k个邻近值,当然k不能超过训练样本个数 

    relustLabel = mode(trainlabels(IX(1:len))); % 取众数(即出现频率最高的label)作为返回结果

    %%%%%%%%%%%%%%%%%对于回归而言: relustLabel = avg(trainlabels(IX(1:len)))

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); 

plot3(data(label1,1),data(label1,2),data(label1,3),'ro'); 

hold on 

plot3(data(label2,1),data(label2,2),data(label2,3),'go');

plot3(data(label3,1),data(label3,2),data(label3,3),'bo'); 

grid on  %归一化处理 

maxV = max(dataMat);

minV = min(dataMat);

range = maxV-minV;

newdataMat =  (dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1])); 

%测试数据比例

Ratio = 0.1; 

numTest = Ratio * len; % 100条测试, 900条训练

 

%训练数据和测试数据 

TrainData=newdataMat(numTest+1:end,:);

TrainLabels=labels(numTest+1:end,:);

TestData=newdataMat(1:numTest,:);

TestLabels=labels(1:numTest,:); %测试,欧氏距离type=1, 夹角余弦type=2 

type=1; 

for i = 1:numTest

    classifyresult =  KNN(TestData(i,:),TrainData,TrainLabels,k,type);

    % fprintf('第 %d 条记录,测试结果为:%d  真实结果为:%d\n',[iclassifyresult(i) labels(i)])

    [classifyresult labels(i)])

        if(classifyresult~=labels(i))

            error = error+1;

        end

end

classifyresult=classifyresult';

fprintf('分类错误的记录标签为:') 

Index=find(classifyresult~=TestLabels)

fprintf('准确率为:%f\n',1-error/(numTest))

常见机器学习算法原理+实践系列5(knn分类+keans聚类)

...类K-NearestNeighborK临近算法是一种有监督的分类算法,工作原理很简单,存在一个样本集合,也成为训练样本,样本中包含标签,将新数据的每个特征与样本集合的数据对应特征进行比较,然后提取样本最相似的分类标签,k就是... 查看详情

knn算法基本原理与sklearn实现(代码片段)

‘‘‘KNN近邻算法,有监督学习算法用于分类和回归思路:1.在样本空间中查找k个最相似或者距离最近的样本2.根据这k个最相似的样本对未知样本进行分类步骤:1.对数据进行预处理提取特征向量,对原来的数据重新表达2.确定距... 查看详情

转:机器学习算法原理解析-分类(代码片段)

...法;决策树;支持向量机;神经网络;1. KNN分类算法原理及应用1.1 KNN概述K最近邻(k-NearestNeighbor,KNN)分类算法是最简单的机器学习算法。KNN算法的指导思想是“近 查看详情

免杀原理与实践

Exp3免杀原理与实践一、实践内容1.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;2.通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原... 查看详情

k近邻法(knn)原理小结(代码片段)

  一、绪论   K近邻法(k-nearestneighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用。比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用... 查看详情

网易微专业算法原理与实践2

 第二课数组和字符串 1.KMP方法wiki2.暴力破解   查看详情

免杀原理与实践

201753142020-3《网络对抗技术》Exp3免杀原理与实践Week5目录201753142020-3《网络对抗技术》Exp3免杀原理与实践Week5一、实践目标1、实践对象2、实践内容二、基础知识1、实践要求2、指令/参数3、预备知识三、实践步骤1、正确使用msf编... 查看详情

《深度学习:原理与应用实践》中文版pdf

下载:https://pan.baidu.com/s/1YljEeog_D0_RUHjV6hxGQg《深度学习:原理与应用实践》中文版PDF,带目录和书签;经典书籍,讲解详细;如图: 查看详情

分享《深度学习优化与识别》pdf+《深度学习原理与tensorflow实践》pdf

...og.51cto.com/3215120《深度学习、优化与识别》PDF+《深度学习原理与TensorFlow实践》PDF《深度学习原理与TensorFlow实践》PDF,304页,有目录。《深度学习、优化与识别》PDF,411页,有目录。如图: 查看详情

redis核心原理与实践--字符串实现原理

Redis是一个键值对数据库(key-valueDB),下面是一个简单的Redis的命令:>SETmsg"hellowolrd"该命令将键“msg”、值“hellowolrd”这两个字符串保存到Redis数据库中。本章分析Redis如何在内存中保存这些字符串。redisObjectRedis中的数据对... 查看详情

20154329《网络对抗技术》后门原理与实践

#Exp2后门原理与实践 ##实验准备 1.知识储备 关于netcat:    又名nc,ncat.是一个底层工具,进行基本的TCPUDP数据收发。常被与其他工具结合使用,起到后门的作用。2.f附件准备 在课程主页下载附件ncat.exe... 查看详情

分享《深度学习:原理与应用实践》+pdf+张重生

下载:https://pan.baidu.com/s/1LmlYGbleDhkDAuqoZ2XjAQ更多资料分享:http://blog.51cto.com/14087171《深度学习:原理与应用实践》中文版PDF,带目录和书签;经典书籍,讲解详细;如图: 查看详情

exp3免杀原理与实践20154302薛师凡

Exp3免杀原理与实践20154302薛师凡一、实践目标与内容利用多种工具实现实现恶意代码免杀在另一台电脑上,杀软开启的情况下,实现运行后门程序并回连成功。在保证后门程序功能的情况下实现杀软共存。二、实践过程与步骤1.... 查看详情

k-近邻算法(knn)

1、K-近邻算法原理 1.1算法特点简单地说,k-近邻算法采用测量不同特征值之间的距离方法进行分类。优点:精度高、对异常值不敏感、无数据输入假定缺点:计算复杂度高、空间复杂度高适用数据范围:数值型和标称型 1... 查看详情

后门原理与实践

一、实验操作步骤1.Windows获得LinuxShellipconfig查询Windows主机IP地址在Windows中输入win+r→cmd→cd→ncat目录文件→ncat.exe-l-p4310(监听端口)在Linux输入nc192.168.1.1854311-e/bin/sh连接上端口 Windows获得Linuxshell,可运行任意指令。 2.Linu... 查看详情

exp3-免杀原理与实践(代码片段)

Exp3-免杀原理与实践目录Exp3-免杀原理与实践1基础问题回答2实验环境3实践内容3.1正确使用msf编码器,使用msfvenom生成如jar之类的其他文件3.1.1检测实验2中生成的后门程序3.1.2编码一次3.1.2编码10次3.2生成jar文件3.3生成php文件3.4veil... 查看详情

事物与分布式事物原理实践

ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。       查看详情

exp2后门原理与实践20154317

        实验二:后门原理与实践实验要求:使用netcat获取主机操作Shell,cron启动。使用socat获取主机操作Shell,任务计划启动。使用MSFmeterpreter生成可执行文件,利用ncat或socat传送到主机使用MSFmeterpreter... 查看详情