使用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实现的系统实用log类实例
Jun 30 Python
python爬虫之百度API调用方法
Jun 11 Python
将Dataframe数据转化为ndarry数据的方法
Jun 28 Python
Python常用模块之requests模块用法分析
May 15 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 Python
Python基础之Socket通信原理
Apr 22 Python
python基础之文件操作
Oct 24 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
PHP5中MVC结构学习
2006/10/09 PHP
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
Python中property属性实例解析
2018/02/10 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
python opencv肤色检测的实现示例
2020/12/21 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
办公室经理岗位职责
2014/01/01 职场文书
买房委托公证书
2014/04/08 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
2015员工年度考核评语
2015/03/25 职场文书
物业保洁员管理制度
2015/08/05 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang