Python代码实现KNN算法


Posted in Python onDecember 20, 2017

kNN算法是k-近邻算法的简称,主要用来进行分类实践,主要思路如下:

1.存在一个训练数据集,每个数据都有对应的标签,也就是说,我们知道样本集中每一数据和他对应的类别。
2.当输入一个新数据进行类别或标签判定时,将新数据的每个特征值与训练数据集中的每个数据进行比较,计算其到训练数据集中每个点的距离(下列代码实现使用的是欧式距离)。
3.然后提取k个与新数据最接近的训练数据点所对应的标签或类别。
4.出现次数最多的标签或类别,记为当前预测新数据的标签或类别。

欧式距离公式为:

distance= sqrt((xA0-XB0)^2+(xA1-XB1)^2+...+(xAn-XBn)^2)(若数据有n个特征项)

以下为代码实现:

#! /usr/bin/python 
#coding=utf-8 
from numpy import * 
import operator 
def createDataSet(): 
  group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])#训练数据样本集合 
  labels = ['A','A','B','B']#训练数据对应的类别 
  return group,labels 
''''' 
inX:用于分类的输入向量 
dataSet:训练样本集合 
labels:标签向量 
k:k-近邻算法中的k 
''' 
def classify0(inX,dataSet,labels,k): 
  dataSetSize = dataSet.shape[0] #获取数组的维度,也就是获取训练样本的行数(样本数),若获取列数,则为shape[1] 
  diffMat = tile(inX,(dataSetSize,1)) - dataSet # tile 表示inX在重复dataSetSize行,重复1列。为输入向量与各个样本求取欧式距离做准备。 
  sqDiddMat = diffMat**2 #diffMat是输入向量与我们训练样本每个点相减得到的,**2表示值的结果取平方。 
  sqDistances = sqDiddMat.sum(axis=1)#默认为axis=0,axis=1以后就是将一个矩阵的每一行向量相加 
  distances = sqDistances**0.5 #对结果进行开平方,得到输入向量与每个训练样本中点的欧式距离 
  sorteDistIndicies = distances.argsort()#将距离结果按照从小到大排序获得索引值 
  classcount={} #这是一个字典,key为类别,value为距离最小的前k个样本点里面为该类别的个数。 
  for i in range(k): 
    voteIlabel = labels[sorteDistIndicies[i]]#获取距离最小的前k个样本点对应的label值 
    classcount[voteIlabel] = classcount.get(voteIlabel,0)+1 #如果之前的样本点label值与与现在的相同,则累计加1,否则,此次加1 
  sorteClassCount = sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=True) #针对calsscount获取对象的第1个域的值进行降序排序。也就是说根据类别的个数从大到小排序。 
  return sorteClassCount[0][0] #返回排序的字典的第一个元素的key,即分类后的类别 
 
createDataSet() 
print classify0([0.9,0.9],group,labels,3)

结果为:A 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 文件与目录操作
Dec 24 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
Python如何获取系统iops示例代码
Sep 06 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
对命令行模式与python交互模式介绍
May 12 Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
python画蝴蝶曲线图的实例
Nov 21 Python
浅析Django中关于session的使用
Dec 30 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
详解appium+python 启动一个app步骤
Dec 20 #Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 #Python
Python实现感知机(PLA)算法
Dec 20 #Python
详解Python nose单元测试框架的安装与使用
Dec 20 #Python
使用python实现knn算法
Dec 20 #Python
python实现kNN算法
Dec 20 #Python
解析Python中的eval()、exec()及其相关函数
Dec 20 #Python
You might like
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
javascript CSS画图之基础篇
2009/07/29 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python笔记(叁)继续学习
2012/10/24 Python
Python通过future处理并发问题
2017/10/17 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
python同时替换多个字符串方法示例
2019/09/17 Python
pandas中ix的使用详细讲解
2020/03/09 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
《翻越远方的大山》教学反思
2014/04/13 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
人事局接收函
2015/01/31 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电