机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

关键字:邻近算法(kNN: k Nearest Neighbors)、python、源码解析、测试
作者:米仓山下
时间:2018-10-21
机器学习实战(Machine Learning in Action,@author: Peter Harrington)
源码下载地址:https://www.manning.com/books/machine-learning-in-action
git@github.com:pbharrin/machinelearninginaction.git

*************************************************************
一、邻近算法(KNN)

原理:存在一个样本数据集合(训练样本),并且样本集中每个数据都存在标签(知道每个样本所属类别),输入没有标签的新数据(测试数据),将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最邻近)的分类标签,一般只选择k个最相似的数据,通常k不超过20的整数,最后选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

#KNN实现函数
Input:inX: 待分类数据向量(1xN); dataSet:已知分类的m条数据集(NxM);labels:数据类别标签(1xM vector);k:KNN的最邻近数据个数阈值
Output:最可能的类别标签

def classify0(inX, dataSet, labels, k):dataSetSize = dataSet.shape[0]diffMat = tile(inX, (dataSetSize,1)) - dataSet   #计算欧式距离sqDiffMat = diffMat**2                           #计算欧式距离sqDistances = sqDiffMat.sum(axis=1)              #计算欧式距离distances = sqDistances**0.5                     #计算欧式距离sortedDistIndicies = distances.argsort()         #排序  classCount={}          for i in range(k):                               #计算k个数据中,各类别出现的次数voteIlabel = labels[sortedDistIndicies[i]]classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)#排序return sortedClassCount[0][0]                    #返回出现次数最多的类别

*************************************************************
二、kNN.py中其他方法

classify0----KNN实现函数
createDataSet----创建测试数据集,4×2,两个特征,四条数据;标签为1×4,对应为类别
file2matrix----读取数据创建为32×32的矩阵,用来处理手写体数字识别的数据处理,将文本文件中的数据处理成矩阵。
autoNorm----归一化函数:(value-minValue)/(maxValue-minValue),将传入的数据集进行归一化处理,归一化将所有特征的取值压缩到0-1之间(或-1到1之间),可以消除不同特征取值在不同数量级所造成的不同特征重要性不均等的情况。

#约会数据测试
datingClassTest----已完成分类的数据为datingTestSet2.txt中。
数据说明:前三列为特征——每年获得的飞行常客里程数,玩视频游戏所耗时间百分比,每周消费冰淇淋公升数;最后一类为类别——不喜欢的人,魅力一般的人,极具魅力的人。
通过hoRatio来控制训练和测试数据比例,classifierResult为测试所得的类别,方法中还通过与真实类别比较,然后统计错误率和错误数
------------------------------------------------------------
#手写体数字识别(0-9)
handwritingClassTest----手写体识别数字示例,已知类别(0-9十个数字)数据,已经处理成32×32的0-1矩阵数据。
数据说明:训练数据位于trainingDigits文件夹内,里面的文本文件命名规则为:"_"之前为该文件实际对应的数字;每个文件里面为32×32的矩阵,通过0-1来表示对应的数据

img2vector----2×32的0-1矩阵数据文件读取后转换为1×1024的向量

------------------------------------------------------------
测试:
import kNN
>>> kNN.datingClassTest()#约会数据测试
the classifier came back with: 3, the real answer is: 3
the classifier came back with: 2, the real answer is: 2
the classifier came back with: 1, the real answer is: 1
the classifier came back with: 1, the real answer is: 1
                        ……
the classifier came back with: 1, the real answer is: 1
the classifier came back with: 1, the real answer is: 1
the classifier came back with: 2, the real answer is: 2
the total error rate is: 0.064000
32.0

>>> kNN.handwritingClassTest()#手写体数字识别(0-9)
the classifier came back with: 9, the real answer is: 9
the classifier came back with: 9, the real answer is: 9
                        ……
the classifier came back with: 9, the real answer is: 9
the classifier came back with: 9, the real answer is: 9

the total number of errors is: 11

the total error rate is: 0.011628

*************************************************************
三、利用matplotlib绘制散点图

python createFirstPlot.py

(图datingTestSet2)
python createDist2.py

(图createDist2)
*************************************************************

总结:方法无法持久化,每次测试都要计算一遍

转载于:https://www.cnblogs.com/Micang/p/9900800.html

机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)相关推荐

  1. 决策树(chap3)Machine Learning In Action学习笔记

    优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型(必须离散化)和标称型. 决策树创建分支的伪代码函数crea ...

  2. Machine Learning in Action 读书笔记---第5章 Logistic回归

    Machine Learning in Action 读书笔记 第5章 Logistic回归 文章目录 Machine Learning in Action 读书笔记 一.Logistic回归 1.L ...

  3. Machine Learning in Action 读书笔记---第3章 决策树

    Machine Learning in Action 读书笔记 第3章 决策树 文章目录 Machine Learning in Action 读书笔记 一.决策树算法简介 1 决策树的构造 2 决策 ...

  4. Machine Learning in Action 读书笔记---第4章 基于概率论的分类方法:朴素贝叶斯

    Machine Learning in Action 读书笔记 第4章 基于概率论的分类方法:朴素贝叶斯 文章目录 Machine Learning in Action 读书笔记 一.基于贝叶斯决策理 ...

  5. Machine Learning in Action 读书笔记---第8章 预测数值型数据:回归

    Machine Learning in Action 读书笔记 第8章 预测数值型数据:回归 文章目录 Machine Learning in Action 读书笔记 一.回归 1.回归的一般过程 2 ...

  6. 机器学习:k邻近算法(KNN)

    title: 机器学习:k邻近算法(KNN) date: 2019-11-16 20:20:41 mathjax: true categories: 机器学习 tags: 机器学习 什么是K邻近算法? ...

  7. 机器学习(Machine Learning)——深度学习(Deep Learning)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/abcjennifer/article/ ...

  8. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第一讲)

    作者:林夕 本文长度为2900字,建议阅读9分钟 本文为大家介绍图网络的基本概念.网络的应用以及图的结构. 标签:机器学习 目录 一.Why Networks 二.网络的应用     2.1 应用领域 ...

  9. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第二讲)

    作者:于媛,十三鸣 本文长度为3300字,建议阅读10+分钟 本文为大家介绍常用的网络属性和经典的网络模型. 标签:机器学习 [ 导读 ]在研究网络的时候,我们往往需要从结构层面对网络进行分析,网络属 ...

  10. 《机器学习实战》第8章学习笔记(回归)之预测乐高玩具套装的价格

    原文中通过Google提供的API来抓取价格,但由于现在访问不了Google,所以,直接通过文本给的html文件直接读取价格信息.然后进一步进行分析预测. 代码实现: # -*- coding: ut ...

最新文章

  1. jQuery图片自动添加水印插件
  2. VS2008 快捷键大全[转帖]
  3. Spring MVC--使用默认的servlet来响应静态文件
  4. java设置属性的取值范围是多少_jvm-Java系统属性的范围
  5. 本周Java技巧#7 – Maven慢吗?
  6. 服务器可以装两个系统吗,云服务器可以装多个系统吗
  7. 微服务升级_SpringCloud Alibaba工作笔记0023---Nacos之Namespace空间方案
  8. Scrum Meeting---Ten(2015-11-5)
  9. 解决在eclipse里没有“Dynamic Web Project“这个选项的问题
  10. thinkphp中AJAX返回ajaxReturn()方法分析
  11. 编译lame报错:lame_init_old找不到
  12. html去掉右侧滚动条,html中去掉textarea右侧滚动条和右下角拖拽
  13. viewport的width值应该怎么设置
  14. Kafka原理介绍+安装+基本操作
  15. my-mind在线思维导图软件
  16. 软件安全漏洞测试报告_现实生活中的软件安全漏洞以及如何确保安全
  17. Jzoj4896 兔子
  18. BUUCTF·[MRCTF2020]天干地支+甲子·WP
  19. 从cocostudio获取控件,添加回调函数
  20. DevOps 转型实践

热门文章

  1. C语言字符串分割 trimmed simplified split
  2. 360安全卫士企业版本 跳过卸载保护密码
  3. 第3章 从零开始的计算机系统
  4. 类与对象的基本语法+练习题
  5. Kunbernetes从私有仓库nexus拉取镜像
  6. lesson2分频计数器设计
  7. Learning to Reweight Examples for Robust Deep Learning
  8. 【AI科幻】地球陨落·平行世界
  9. macOS 虚拟摄像头:CamTwist for Mac
  10. 代码有毒/凉茶/mrcode 关于本博客