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使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
Python yield 使用浅析
May 28 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
解决python3 pika之连接断开的问题
Dec 18 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
Python实现Linux监控的方法
May 16 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
python自动化测试之如何解析excel文件
Jun 27 Python
django迁移数据库错误问题解决
Jul 29 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
解决Python 写文件报错TypeError的问题
Oct 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设计模式 Singleton(单例模式)
2011/06/26 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
php之可变函数的实例详解
2017/09/13 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
angularJS开发注意事项
2018/05/26 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
python中PIL安装简单教程
2016/04/21 Python
深入理解Python3 内置函数大全
2017/11/23 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
班组长的岗位职责
2013/12/09 职场文书
应用化学专业职业生涯规划书
2014/01/22 职场文书
母亲节感恩寄语
2014/02/21 职场文书
《新型玻璃》教学反思
2014/04/13 职场文书
三八妇女节活动总结
2014/05/04 职场文书
大型活动组织方案
2014/05/10 职场文书
给校长的建议书300字
2014/05/16 职场文书
委托公证书格式
2015/01/26 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
服务员岗位职责范本
2015/04/09 职场文书
心灵点滴观后感
2015/06/02 职场文书
十月围城观后感
2015/06/08 职场文书