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写日志封装类实例
Jun 28 Python
python万年历实现代码 含运行结果
May 20 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
Python读写/追加excel文件Demo分享
May 03 Python
Python Web编程之WSGI协议简介
Jul 18 Python
TensorFlow实现Logistic回归
Sep 07 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 Python
python多维数组分位数的求取方式
Mar 03 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
Python3爬虫RedisDump的安装步骤
Feb 20 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 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类的反射用法实例
2014/11/03 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
JQuery的html(data)方法与<script>脚本块的解决方法
2010/03/09 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
Bootstrap模态框插入视频的实现代码
2017/06/25 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
小程序实现录音功能
2020/09/22 Javascript
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
百日安全生产活动总结
2014/07/05 职场文书
门卫岗位职责
2015/02/09 职场文书
预备党员自我评价范文
2015/03/04 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python
浅谈怎么给Python添加类型标注
2021/06/08 Python
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android