使用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 相关文章推荐
go和python调用其它程序并得到程序输出
Feb 10 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
python中enumerate函数用法实例分析
May 20 Python
Python中的字典与成员运算符初步探究
Oct 13 Python
Python爬取网易云音乐热门评论
Mar 31 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
python Pandas 读取txt表格的实例
Apr 29 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
python 利用zmail库发送邮件
Sep 11 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
vue封装swiper代码实例解析
2019/10/08 Javascript
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
对numpy中的数组条件筛选功能详解
2018/07/02 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
python批量处理文件或文件夹
2020/07/28 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
业务代表的岗位职责
2013/11/16 职场文书
《藏戏》教学反思
2014/02/11 职场文书
大学生社会实践评语
2014/04/25 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
综合素质自我评价评语
2015/03/06 职场文书
开业典礼致辞
2015/07/29 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL
Vue的过滤器你真了解吗
2022/02/24 Vue.js