使用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脚本实现查找webshell的方法
Jul 31 Python
深入解读Python解析XML的几种方式
Feb 16 Python
Python 转义字符详细介绍
Mar 21 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
使用浏览器访问python写的服务器程序
Oct 10 Python
python区分不同数据类型的方法
Oct 14 Python
Python栈的实现方法示例【列表、单链表】
Feb 22 Python
python 连续不等式语法糖实例
Apr 15 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 Python
Django使用channels + websocket打造在线聊天室
May 20 Python
Python OpenCV实现传统图片格式与base64转换
Jun 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
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Python与shell的3种交互方式介绍
2015/04/11 Python
Python变量和字符串详解
2017/04/29 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
Python Process多进程实现过程
2019/10/22 Python
Python基于WordCloud制作词云图
2019/11/29 Python
python实现俄罗斯方块小游戏
2020/04/24 Python
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
城建学院毕业生自荐信
2014/01/31 职场文书
《自然之道》教学反思
2014/02/11 职场文书
大学生简短的自我评价
2014/09/12 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
2015年城管执法工作总结
2015/07/23 职场文书