使用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和C语言混合编程实例
Jun 04 Python
python Crypto模块的安装与使用方法
Dec 21 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
Python中super函数用法实例分析
Mar 18 Python
python浪漫表白源码
Apr 05 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
Tensorflow限制CPU个数实例
Feb 06 Python
python virtualenv虚拟环境配置与使用教程详解
Jul 13 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
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
jQuery复合事件用法示例
2017/06/10 jQuery
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
Python3 replace()函数使用方法
2018/03/19 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
详解django自定义中间件处理
2018/11/21 Python
python实现复制文件到指定目录
2019/10/16 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
瑜伽国际:Yoga International
2018/04/18 全球购物
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
企业精神口号
2014/06/11 职场文书
推广普通话标语
2014/06/27 职场文书
技术入股合作协议书
2014/10/07 职场文书
工厂见习报告范文
2014/10/31 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书