使用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多线程抓取天涯帖子内容示例
Apr 03 Python
使用Python的PEAK来适配协议的教程
Apr 14 Python
python获取外网ip地址的方法总结
Jul 02 Python
Python字符串拼接的几种方法整理
Aug 02 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
对python中类的继承与方法重写介绍
Jan 20 Python
python面试题小结附答案实例代码
Apr 11 Python
基于Python批量生成指定尺寸缩略图代码实例
Nov 20 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
对PyTorch中inplace字段的全面理解
May 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
php 生成WML页面方法详解
2009/08/09 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
倡议书范文
2014/04/16 职场文书
科学发展观演讲稿
2014/09/11 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
体育运动会广播稿
2014/10/05 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
亮剑观后感
2015/06/05 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
5行Python代码实现一键批量扣图
2021/06/29 Python