使用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学习笔记_数据排序方法
May 22 Python
编程语言Python的发展史
Sep 26 Python
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
Python字典实现简单的三级菜单(实例讲解)
Jul 31 Python
python实现随机漫步算法
Aug 27 Python
Python3列表内置方法大全及示例代码小结
May 10 Python
Python中的引用知识点总结
May 20 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
200行python代码实现贪吃蛇游戏
Apr 24 Python
Python使用matplotlib绘制圆形代码实例
May 27 Python
如何用python免费看美剧
Aug 11 Python
pycharm激活方法到2099年(激活流程)
Sep 22 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
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
php验证码生成代码
2015/11/11 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
php获取微信openid方法总结
2019/10/10 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
2019/09/23 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
html5使用canvas画一条线
2014/12/15 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
zooplus意大利:在线宠物商店
2019/08/07 全球购物
金融专业个人求职信范文
2013/11/28 职场文书
追悼会子女答谢词
2014/01/28 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
学校宣传标语
2014/06/18 职场文书
学校党员对照检查材料
2014/08/28 职场文书
违反交通法规检讨书
2014/09/10 职场文书
优秀大学生自荐信
2015/03/26 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL