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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
python通过加号运算符操作列表的方法
Jul 28 Python
Python实现周期性抓取网页内容的方法
Nov 04 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
django 数据库返回queryset实现封装为字典
May 19 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
Python离线安装openpyxl模块的步骤
Mar 30 Python
python高温预警数据获取实例
Jul 23 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编译安装时常见错误解决办法
2015/05/28 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
php链式操作的实现方式分析
2019/08/12 PHP
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
python中itertools模块zip_longest函数详解
2018/06/12 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
白色公司:The White Company
2017/10/11 全球购物
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
大整数数相乘的问题
2012/07/22 面试题
后勤人员自我鉴定
2013/10/20 职场文书
普师专业个人自荐信范文
2013/11/26 职场文书
仓库班组长岗位职责
2013/12/12 职场文书
丧事主持词大全
2014/04/02 职场文书
北京奥运会口号
2014/06/21 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
上甘岭观后感
2015/06/10 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
python爬虫框架feapde的使用简介
2021/04/20 Python
python基础入门之普通操作与函数(三)
2021/06/13 Python
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL