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实现3行代码解简单的一元一次方程
Aug 18 Python
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
Pandas探索之高性能函数eval和query解析
Oct 28 Python
Python3 中文文件读写方法
Jan 23 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 Python
Python实现图片拼接的代码
Jul 02 Python
python协程之动态添加任务的方法
Feb 19 Python
Python操作Sonqube API获取检测结果并打印过程解析
Nov 27 Python
Python如何在DataFrame增加数值
Feb 14 Python
Python龙贝格法求积分实例
Feb 29 Python
Python快速优雅的批量修改Word文档样式
May 20 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 分页原理详解
2009/08/21 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
文本框文本自动补全效果示例分享
2014/01/19 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
js replace 全局替换的操作方法
2018/06/12 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
python多线程threading.Lock锁用法实例
2014/11/01 Python
用Python制作简单的钢琴程序的教程
2015/04/01 Python
Python的设计模式编程入门指南
2015/04/02 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
应届生财务会计求职信
2013/11/05 职场文书
员工安全承诺书
2014/05/22 职场文书
新闻报道策划方案
2014/06/11 职场文书
大学生工作求职信
2014/06/23 职场文书
公司委托书格式范本
2014/09/16 职场文书
繁星春水读书笔记
2015/06/30 职场文书
2015初一年级组工作总结
2015/07/24 职场文书