基于:ml in action

KNN算法原理:

  1. 训练样本集及其标签集

  2. 测试样本

  3. 计算与测试样本距离最近的K个训练样本

  4. 统计这K个训练样本的标签频率

  5. 选择频率最高的标签作为测试样本的标签

确定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相关推荐

  1. K NEAREST NEIGHBOR 算法(knn)

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  2. K Nearest Neighbor 算法

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  3. k Nearest Neighbor Algorithm

    k Nearest Neighbor Algorithm k Nearest Neighbor(kNN) algorithm算法和k-Means算法一样,都是简单理解,但是实际效果出人意料的算法之一. ...

  4. 机器学习之深入理解K最近邻分类算法(K Nearest Neighbor)

    [机器学习]<机器学习实战>读书笔记及代码:第2章 - k-近邻算法 1.初识 K最近邻分类算法(K Nearest Neighbor)是著名的模式识别统计学方法,在机器学习分类算法中占有 ...

  5. 文献记录(part81)--Clustering-based k -nearest neighbor classification for large-scale data with ...

    学习笔记,仅供参考,有错必纠 文章目录 Clustering-based k -nearest neighbor classification for large-scale data with ne ...

  6. 机器学习——K近邻算法(KNN)(K Nearest Neighbor)

    参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...

  7. kNN算法(k近邻算法,k Nearest Neighbor)

    主要内容: 1.认识kNN算法 2.kNN算法原理 3.应用举例 4.kNN改进方法 1.认识knn算法 "看一个人怎么样,看他身边的朋友什么样就知道了",kNN算法即寻找最近的K ...

  8. 【资源分享】今日学习打卡--k近邻法 (k Nearest Neighbor Method)

    他来了他来了,他带着礼物走来了. 今天继续学习打卡 今天给大家分享的是k近邻法,是监督学习中的最基本的分类问题模型. 博主从自己看的几个比较好的视频中,分享了一些自己认为比较好的视频.希望能在大家和博 ...

  9. 【机器翻译】《Nearest Neighbor Knowledge Distillation for Neural Machine Translation》论文总结

    <Nearest Neighbor Knowledge Distillation for Neural Machine Translation>https://arxiv.org/pdf/ ...

  10. 最近邻分类器(Nearest Neighbor Classifier)

    先从简单的方法开始说,先提一提最近邻分类器/Nearest Neighbor Classifier,不过事先申明,它和深度学习中的卷积神经网/Convolutional Neural Networks ...

最新文章

  1. 全国志愿信息服务器,全国志愿者服务信息系统官网登录,2020全国志愿者服务信息系统官网登录注册入口预约 v1.0-手游汇...
  2. CTFshow 信息收集 web4
  3. BusyBox编译配置
  4. 跨网段远程调试vs_使用 VS 2019 跨平台编写和调试 Linux C/C++程序
  5. Spring Boot学习总结(15)——Spring Boot优缺点再总结
  6. 吴恩达机器学习【第三天】线性代数基础知识
  7. 定义或修改本地屏幕元素的注释
  8. Vue之ElementUI导航菜单
  9. 归并排序时间复杂度为什么是NlgN
  10. c++中struct构造函数
  11. 国产系统deepin。为什么要国产化?国产化意味着什么?(含Deepin系统部分问题解决)
  12. 头条极速版-艳云脚本云控系统
  13. IllegalStateException: For MAC signing you do not need to specify the verifier key separately异常解决
  14. pyton 内置模块
  15. 网站制作入门指导教程
  16. 计算机工资管理软件是,计件工资管理软件
  17. 74.网络安全渗透测试—[SQL注入篇13]—[SQLSERVER+ASP-执行系统命令]
  18. java正则表达式控制格式_“如果Java受到一两个大型供应商的控制,则可能会遭受挫折”...
  19. 转转转转转转转转转转转转转转转转转转转转转转转转转
  20. GitHub页面接管并利用-子域名接管

热门文章

  1. Hibernate 笔记5 load和get方法的区别
  2. UNIX Shell 编程(5)
  3. VEGAS Movie Studio 15 Platinum渲染选什么格式好?
  4. POJ 1149 PIGS(最大流)dinic模板注释
  5. Service Work生命周期
  6. console.log(12.toString())为啥会报错呢?
  7. 简单粗暴地理解 JS 原型链
  8. tomcat 8优化配置
  9. 《程序化广告实战》一 导读
  10. IDC:2017年全球公有云服务开支将达1225亿美元