使用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 23 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
Python环境搭建之OpenCV的步骤方法
Oct 20 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
python实现简易版计算器
Jun 22 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
Python 脚本的三种执行方式小结
Dec 21 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
keras K.function获取某层的输出操作
Jun 29 Python
Python 日期与时间转换的方法
Aug 01 Python
利用python 下载bilibili视频
Nov 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
PHP新手上路(十四)
2006/10/09 PHP
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
培养自己的php编码规范
2015/09/28 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
asm.js使用示例代码
2013/11/28 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
vue使用vue-cli快速创建工程
2017/07/28 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
JS验证码实现代码
2017/09/14 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
JavaScript如何操作css
2020/10/24 Javascript
Python正则表达式知识汇总
2017/09/22 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
python 表格打印代码实例解析
2019/10/12 Python
python将unicode和str互相转化的实现
2020/05/11 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
微博营销计划书
2014/01/10 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL