使用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编程中的异常处理教程
Aug 21 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
Python队列的定义与使用方法示例
Jun 24 Python
import的本质解析
Oct 30 Python
python实现发送邮件功能代码
Dec 14 Python
SVM基本概念及Python实现代码
Dec 27 Python
python的Tqdm模块的使用
Jan 10 Python
Python之时间和日期使用小结
Feb 14 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
Python切片列表字符串如何实现切换
Aug 06 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 替换模板变量实现步骤
2009/08/24 PHP
教你如何使用php session
2013/10/28 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
理解python多线程(python多线程简明教程)
2014/06/09 Python
python中defaultdict的用法详解
2017/06/07 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
kafka-python批量发送数据的实例
2018/12/27 Python
python使用 zip 同时迭代多个序列示例
2019/07/06 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
班长竞选演讲稿
2014/04/24 职场文书
临床护理求职信
2014/04/26 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
服务员态度差检讨书
2014/10/28 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
交通事故被告代理词
2015/05/23 职场文书
mysql创建存储过程及函数详解
2021/12/04 MySQL