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程序与C++程序的联合使用
Apr 07 Python
Python实现批量下载文件
May 17 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
使用Python编写基于DHT协议的BT资源爬虫
Mar 19 Python
使用Python对MySQL数据操作
Apr 06 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
Python开发之pip安装及使用方法详解
Feb 21 Python
python实现打砖块游戏
Feb 25 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
python实现文件分片上传的接口自动化
Nov 19 Python
Python天气语音播报小助手
Sep 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绘制一条弧线的方法
2015/01/24 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
Yii框架安装简明教程
2020/05/15 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
JavaScript实现简单的计算器
2020/01/16 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
python中的多线程实例教程
2014/08/27 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
Python IDLE入门简介
2017/12/08 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
Python 字符串换行的多种方式
2018/09/06 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
Pycharm安装python库的方法
2020/11/24 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
印尼旅游网站:via
2017/11/12 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
中专生自我鉴定书范文
2013/12/28 职场文书
平面设计专业求职信
2014/08/09 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
国庆阅兵观后感
2015/06/15 职场文书
一文搞懂Redis中String数据类型
2022/04/03 Redis