使用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 中迭代器与生成器实例详解
Mar 29 Python
django框架如何集成celery进行开发
May 24 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
浅谈用VSCode写python的正确姿势
Dec 16 Python
SVM基本概念及Python实现代码
Dec 27 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
pandas 对group进行聚合的例子
Dec 27 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
Django查询优化及ajax编码格式原理解析
Mar 25 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
python sleep和wait对比总结
Feb 03 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
ASP知识讲座四
2006/10/09 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
python中 logging的使用详解
2017/10/25 Python
Python3实现购物车功能
2018/04/18 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
python request 模块详细介绍
2020/11/10 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
教你打造完美的创业计划书
2014/01/06 职场文书
锅炉工岗位职责
2015/02/13 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
Python进程池与进程锁之语法学习
2022/04/11 Python