使用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 subprocess模块学习总结
Mar 13 Python
Python collections模块实例讲解
Apr 07 Python
Python输出9*9乘法表的方法
May 25 Python
python中lambda()的用法
Nov 16 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
Python rstrip()方法实例详解
Nov 11 Python
python中的tcp示例详解
Dec 09 Python
Django 批量插入数据的实现方法
Jan 12 Python
Django中使用Celery的方法步骤
Dec 07 Python
python使用shell脚本创建kafka连接器
Apr 29 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
解决中英文字符串长度问题函数
2007/01/16 PHP
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
深思 PHP 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
PHP strripos函数用法总结
2019/02/11 PHP
浅谈javascript中的作用域
2012/04/07 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
公司投资建议书
2014/05/16 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python
PyTorch中的torch.cat简单介绍
2022/03/17 Python