使用python实现knn算法


Posted in Python onDecember 20, 2017

本文实例为大家分享了python实现knn算法的具体代码,供大家参考,具体内容如下

knn算法描述

对需要分类的点依次执行以下操作:
1.计算已知类别数据集中每个点与该点之间的距离
2.按照距离递增顺序排序
3.选取与该点距离最近的k个点
4.确定前k个点所在类别出现的频率
5.返回前k个点出现频率最高的类别作为该点的预测分类

knn算法实现

数据处理

#从文件中读取数据,返回的数据和分类均为二维数组
def loadDataSet(filename):
  dataSet = []
  labels = []
  fr = open(filename)
  for line in fr.readlines():
    lineArr = line.strip().split(",")
    dataSet.append([float(lineArr[0]),float(lineArr[1])])
    labels.append([float(lineArr[2])])
  return dataSet , labels

knn算法

#计算两个向量之间的欧氏距离
def calDist(X1 , X2):
  sum = 0
  for x1 , x2 in zip(X1 , X2):
    sum += (x1 - x2) ** 2
  return sum ** 0.5

def knn(data , dataSet , labels , k):
  n = shape(dataSet)[0]
  for i in range(n):
    dist = calDist(data , dataSet[i])
    #只记录两点之间的距离和已知点的类别
    labels[i].append(dist)
  #按照距离递增排序
  labels.sort(key=lambda x:x[1])
  count = {}
  #统计每个类别出现的频率
  for i in range(k):
    key = labels[i][0]
    if count.has_key(key):
      count[key] += 1
    else : count[key] = 1
  #按频率递减排序
  sortCount = sorted(count.items(),key=lambda item:item[1],reverse=True)
  return sortCount[0][0]#返回频率最高的key,即label

结果测试

已知类别数据(来源于西瓜书+虚构)

0.697,0.460,1
0.774,0.376,1
0.720,0.330,1
0.634,0.264,1
0.608,0.318,1
0.556,0.215,1
0.403,0.237,1
0.481,0.149,1
0.437,0.211,1
0.525,0.186,1
0.666,0.091,0
0.639,0.161,0
0.657,0.198,0
0.593,0.042,0
0.719,0.103,0
0.671,0.196,0
0.703,0.121,0
0.614,0.116,0

绘图方法

def drawPoints(data , dataSet, labels):
  xcord1 = [];
  ycord1 = [];
  xcord2 = [];
  ycord2 = [];
  for i in range(shape(dataSet)[0]):
    if labels[i][0] == 0:
      xcord1.append(dataSet[i][0])
      ycord1.append(dataSet[i][1])
    if labels[i][0] == 1:
      xcord2.append(dataSet[i][0])
      ycord2.append(dataSet[i][1])
  fig = plt.figure()
  ax = fig.add_subplot(111)
  ax.scatter(xcord1, ycord1, s=30, c='blue', marker='s',label=0)
  ax.scatter(xcord2, ycord2, s=30, c='green',label=1)
  ax.scatter(data[0], data[1], s=30, c='red',label="testdata")
  plt.legend(loc='upper right')
  plt.show()

测试代码

dataSet , labels = loadDataSet('dataSet.txt')
data = [0.6767,0.2122]
drawPoints(data , dataSet, labels)
newlabels = knn(data, dataSet , labels , 5)
print newlabels

运行结果

使用python实现knn算法

使用python实现knn算法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
Python版微信红包分配算法
May 04 Python
编写Python小程序来统计测试脚本的关键字
Mar 12 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
用pickle存储Python的原生对象方法
Apr 28 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 Python
使用Python脚本zabbix自定义key监控oracle连接状态
Aug 28 Python
python 魔法函数实例及解析
Sep 25 Python
python 实现线程之间的通信示例
Feb 14 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 Python
python实现kNN算法
Dec 20 #Python
解析Python中的eval()、exec()及其相关函数
Dec 20 #Python
详解Python中 sys.argv[]的用法简明解释
Dec 20 #Python
简单了解Django模板的使用
Dec 20 #Python
python机器学习之决策树分类详解
Dec 20 #Python
python机器学习之神经网络(三)
Dec 20 #Python
python机器学习之神经网络(二)
Dec 20 #Python
You might like
PHP聊天室技术
2006/10/09 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
php生成验证码函数
2015/10/20 PHP
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
javascript 判断用户有没有操作页面
2017/10/17 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
python实现数据图表
2017/07/29 Python
Python线程创建和终止实例代码
2018/01/20 Python
python中scikit-learn机器代码实例
2018/08/05 Python
python组合无重复三位数的实例
2018/11/13 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
成教自我鉴定
2013/10/27 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
师德标兵事迹材料
2014/12/19 职场文书
2015年宣传工作总结
2015/04/08 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python