使用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使用shelve模块实现简单数据存储的方法
May 20 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
python动态加载包的方法小结
Apr 18 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
Python使用三种方法实现PCA算法
Dec 12 Python
Pycharm配置远程调试的方法步骤
Dec 17 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Python实现图像的垂直投影示例
Jan 17 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
python+playwright微软自动化工具的使用
Feb 02 Python
如何在Python项目中引入日志
May 31 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扩展编写点滴 技巧收集
2010/03/09 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
js资料prototype 属性
2007/03/13 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
在antd Form表单中select设置初始值操作
2020/11/02 Javascript
python标准日志模块logging的使用方法
2013/11/01 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
《长城》教学反思
2014/02/14 职场文书
企业诚信承诺书
2014/05/23 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
父亲节活动总结
2015/02/12 职场文书
美丽心灵观后感
2015/06/01 职场文书
个人欠条范本
2015/07/03 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
Python学习开发之图形用户界面详解
2021/08/23 Python