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按照多个字符对字符串进行分割的方法
Mar 17 Python
Python随机生成信用卡卡号的实现方法
May 14 Python
Python 专题三 字符串的基础知识
Mar 19 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
Python中GIL的使用详解
Oct 03 Python
Python datetime包函数简单介绍
Aug 28 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
tensorboard显示空白的解决
Feb 15 Python
python实现人工蜂群算法
Sep 18 Python
UI自动化定位常用实现方法代码示例
Oct 27 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php简单防盗链实现方法
2015/07/29 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
再谈javascript原型继承
2014/11/10 Javascript
纯javascript实现简单下拉刷新功能
2015/03/13 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
JS重载实现方法分析
2016/12/16 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
JavaScript 闭包的使用场景
2020/09/17 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python中bisect的用法
2014/09/23 Python
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
Python3.5运算符操作实例详解
2019/04/25 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
python 爬虫请求模块requests详解
2020/12/04 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
介绍一下你对SOA的认识
2016/04/24 面试题
入党转预备思想汇报
2014/01/07 职场文书
工作年限证明模板
2014/11/01 职场文书
质量整改报告范文
2014/11/08 职场文书