KNN——K nearest neighbor
基于:ml in action
KNN算法原理:
训练样本集及其标签集
测试样本
计算与测试样本距离最近的K个训练样本
统计这K个训练样本的标签频率
选择频率最高的标签作为测试样本的标签
确定K的值:通过对样本的实验(多次和人工结合),取出误差最小的分类结果。一般小于20
距离:可以是欧氏距离,
归一化:
训练样本为向量,其每个属性的尺度差别很大时,比如X=[x1,x2..],x1属于[0,1],x2属于[1000,2000],
假定距离为欧式距离,样本为X1,X2,
则distance=sqrt((X11-X21)^2+(X12-X22)^2),显然属性x2的差最大值可取1000,其平方为1000*1000,而,x1属性的差最大值为1,其平方为1,则在distance中,x2属性所占比重就会很大,x1的影响可以忽略。
事实上,x1,x2属性的在distance中比重可能应当同样重要,这个时候,需要对x2属性进行放缩,使其尺度放缩到[0,1],一般对所有属性均放缩到[0,1]
公式:
newvalue=(oldvalue-minvalue)/(maxvalue-minvalue)
oldvalue:当前样本值(向量)
minvalue:训练集中对应属性的最小值向量
maxvalue:...最大值向量
优点:简单,
缺点:需要保存训练数据,每次都要计算N次距离,N为训练样本数。时间空间复杂度高
python代码
from numpy import *
import operator
import matplotlib
import matplotlib.pyplot as plt
def generateDataset():
group=array([[1.0,1.1],[1.1,1.0],[0,0],[0,0.1]])
lables=['A','A','B','B']
return group,lables
def classify0(intX,dataSet,lables,k):
datasize=dataSet.shape[0]
diffMat=tile(intX,(datasize,1))-dataSet
distance=diffMat**2
sqrtdistance=distance.sum(1)
sqrtdistance=sqrtdistance**0.5
sortedDistanceIndex=sqrtdistance.argsort()
classsorted={}
for i in range(k):
votedlable=lables[sortedDistanceIndex[i]]
classsorted[votedlable]=classsorted.get(votedlable,0)+1
sortedclass=sorted(classsorted.items(),key=operator.itemgetter(1),reverse=True)
return sortedclass[0][0]
def file2matrix(filepath):
fr=open(filepath)
arrayOlines=fr.readlines()
numberoflines=len(arrayOlines)
returnMat=zeros((numberoflines,3))
vectorlables=[]
index=0
for line in arrayOlines:
line.strip()
listFromline=line.split('\t')
returnMat[index,:]=listFromline[0:3]
vectorlables.append(int(listFromline[-1]))
index+=1
return returnMat,vectorlables
def normMatrix(dataset):
rows=dataset.shape[0]
minval=dataset.min(0)
maxval=dataset.max(0)
maxsubmin=maxval-minval
dataset=(dataset-tile(minval,(rows,1)))/tile(maxsubmin,(rows,1))
return dataset,minval,maxsubmin
def plotdata(dataset,lables):
fig=plt.figure()
ax=fig.add_subplot(111)
ax.scatter(dataset[:,0],dataset[:,1],15.0*array(lables),15.0*array(lables))
fig.show()
(dataset,lables)=file2matrix("datingTestSet.txt")
dataset,minval,maxsubmin=normMatrix(dataset)
print (dataset)
#print (lables)
#print (minval)
#print (maxsubmin)
datasize=dataset.shape[0]
print(type(datasize))
print (datasize)
print (dataset[0,:])
traindata=dataset[0:datasize-10,:]
trainlable=lables[:datasize-10]
testdata=dataset[datasize-10:,:]
print (traindata.shape)
print (testdata.shape)
print (testdata)
testlable=lables[datasize-10:]
for i in range(9):
result=classify0(testdata[i],traindata,trainlable,3)
print ("result is ",result," real lable is ",testlable[i])
转载于:https://blog.51cto.com/searchcoding/1562019
KNN——K nearest neighbor相关推荐
- K NEAREST NEIGHBOR 算法(knn)
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- K Nearest Neighbor 算法
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- k Nearest Neighbor Algorithm
k Nearest Neighbor Algorithm k Nearest Neighbor(kNN) algorithm算法和k-Means算法一样,都是简单理解,但是实际效果出人意料的算法之一. ...
- 机器学习之深入理解K最近邻分类算法(K Nearest Neighbor)
[机器学习]<机器学习实战>读书笔记及代码:第2章 - k-近邻算法 1.初识 K最近邻分类算法(K Nearest Neighbor)是著名的模式识别统计学方法,在机器学习分类算法中占有 ...
- 文献记录(part81)--Clustering-based k -nearest neighbor classification for large-scale data with ...
学习笔记,仅供参考,有错必纠 文章目录 Clustering-based k -nearest neighbor classification for large-scale data with ne ...
- 机器学习——K近邻算法(KNN)(K Nearest Neighbor)
参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...
- kNN算法(k近邻算法,k Nearest Neighbor)
主要内容: 1.认识kNN算法 2.kNN算法原理 3.应用举例 4.kNN改进方法 1.认识knn算法 "看一个人怎么样,看他身边的朋友什么样就知道了",kNN算法即寻找最近的K ...
- 【资源分享】今日学习打卡--k近邻法 (k Nearest Neighbor Method)
他来了他来了,他带着礼物走来了. 今天继续学习打卡 今天给大家分享的是k近邻法,是监督学习中的最基本的分类问题模型. 博主从自己看的几个比较好的视频中,分享了一些自己认为比较好的视频.希望能在大家和博 ...
- 【机器翻译】《Nearest Neighbor Knowledge Distillation for Neural Machine Translation》论文总结
<Nearest Neighbor Knowledge Distillation for Neural Machine Translation>https://arxiv.org/pdf/ ...
- 最近邻分类器(Nearest Neighbor Classifier)
先从简单的方法开始说,先提一提最近邻分类器/Nearest Neighbor Classifier,不过事先申明,它和深度学习中的卷积神经网/Convolutional Neural Networks ...
最新文章
- 全国志愿信息服务器,全国志愿者服务信息系统官网登录,2020全国志愿者服务信息系统官网登录注册入口预约 v1.0-手游汇...
- CTFshow 信息收集 web4
- BusyBox编译配置
- 跨网段远程调试vs_使用 VS 2019 跨平台编写和调试 Linux C/C++程序
- Spring Boot学习总结(15)——Spring Boot优缺点再总结
- 吴恩达机器学习【第三天】线性代数基础知识
- 定义或修改本地屏幕元素的注释
- Vue之ElementUI导航菜单
- 归并排序时间复杂度为什么是NlgN
- c++中struct构造函数
- 国产系统deepin。为什么要国产化?国产化意味着什么?(含Deepin系统部分问题解决)
- 头条极速版-艳云脚本云控系统
- IllegalStateException: For MAC signing you do not need to specify the verifier key separately异常解决
- pyton 内置模块
- 网站制作入门指导教程
- 计算机工资管理软件是,计件工资管理软件
- 74.网络安全渗透测试—[SQL注入篇13]—[SQLSERVER+ASP-执行系统命令]
- java正则表达式控制格式_“如果Java受到一两个大型供应商的控制,则可能会遭受挫折”...
- 转转转转转转转转转转转转转转转转转转转转转转转转转
- GitHub页面接管并利用-子域名接管