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实现从URL地址提取文件名的方法
May 15 Python
python TKinter获取文本框内容的方法
Oct 11 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
Nov 30 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
pandas数据处理进阶详解
Oct 11 Python
django框架cookie和session用法实例详解
Dec 10 Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
10张动图学会python循环与递归问题
Feb 06 Python
Python中的xlrd模块使用整理
Jun 15 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
php中计算时间差的几种方法
2009/12/31 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
Aptana调试javascript图解教程
2009/11/30 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
django框架创建应用操作示例
2019/09/26 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
安踏官方商城:anta.cn
2019/12/16 全球购物
什么是Rollback Segment
2013/04/22 面试题
简历自我评价怎么写呢?
2014/01/06 职场文书
学生打架检讨书1000字
2014/01/16 职场文书
阅兵口号
2014/06/19 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技