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中文乱码的解决方法
Nov 04 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
对Python+opencv将图片生成视频的实例详解
Jan 08 Python
Python实现网站表单提交和模板
Jan 15 Python
python解析xml简单示例
Jun 21 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
Mar 06 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
python opencv肤色检测的实现示例
Dec 21 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
python 爬取华为应用市场评论
May 29 Python
一文搞懂python异常处理、模块与包
Jun 26 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
destoon二次开发入门示例
2014/06/20 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
PHP 与 js的通信(via ajax,json)
2010/11/16 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
用python实现名片管理系统
2020/06/18 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
家长对孩子的评语
2014/04/18 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
党小组评议意见
2015/06/02 职场文书
初中体育课教学反思
2016/02/16 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS