机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)
机器学习实战(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) + 1
sortedClassCount = 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)
*************************************************************
总结:方法无法持久化,每次测试都要计算一遍
机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)的更多相关文章
- 学习笔记之机器学习实战 (Machine Learning in Action)
机器学习实战 (豆瓣) https://book.douban.com/subject/24703171/ 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中 ...
- K近邻 Python实现 机器学习实战(Machine Learning in Action)
算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴.其实K近邻并没有显式的学习过程,它的学习过程就是测试过程.K近邻思想很简单:先给你一个训练数据集D,包括 ...
- 机器学习实战 [Machine learning in action]
内容简介 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存.谋发展的决定性手段,这使得这一过去为分析师和数学家所专属 ...
- 《机器学习实战》学习笔记一K邻近算法
一. K邻近算法思想:存在一个样本数据集合,称为训练样本集,并且每个数据都存在标签,即我们知道样本集中每一数据(这里的数据是一组数据,可以是n维向量)与所属分类的对应关系.输入没有标签的新数据后,将 ...
- Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记
Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...
- 【python与机器学习实战】感知机和支持向量机学习笔记(一)
对<Python与机器学习实战>一书阅读的记录,对于一些难以理解的地方查阅了资料辅以理解并补充和记录,重新梳理一下感知机和SVM的算法原理,加深记忆. 1.感知机 感知机的基本概念 感知机 ...
- Machine Learning(Andrew Ng)学习笔记
1.监督学习(supervised learning)&非监督学习(unsupervised learning) 监督学习:处理具有若干属性且返回值不同的对象.分为回归型和分类型:回归型的返回 ...
- Machine Learning With Spark学习笔记(在10万电影数据上训练、使用推荐模型)
我们如今開始训练模型,还输入參数例如以下: rank:ALS中因子的个数.通常来说越大越好,可是对内存占用率有直接影响,通常rank在10到200之间. iterations:迭代次数,每次迭代都会降 ...
- Machine Learning With Spark学习笔记(提取10万电影数据特征)
注:原文中的代码是在spark-shell中编写运行的,本人的是在eclipse中编写运行,所以结果输出形式可能会与这本书中的不太一样. 首先将用户数据u.data读入SparkContext中.然后 ...
随机推荐
- Android:异步处理之Handler、Looper、MessageQueue之间的恩怨(三)
前言 如果你在阅读本文之前,你不知道Handler在Android中为何物,我建议你先看看本系列的第一篇博文<Android:异步处理之Handler+Thread的应用(一)>:我们都知 ...
- 详解C#泛型(一)
一.C#中的泛型引入了类型参数的概念,类似于C++中的模板,类型参数可以使类型或方法中的一个或多个类型的指定推迟到实例化或调用时,使用泛型可以更大程度的重用代码.保护类型安全性并提高性能:可以创建自定 ...
- 使用秘钥ssh登录远程服务器
一.使用公钥远程登录ssh服务器方式 1.1 在客户端使用ssh-keygen 生成密匙 steven:~ admin$ ssh-keygen //客户端生成秘钥 Generating public ...
- Charles抓包之HTTPS抓包配置
访问我的博客 前言 由于工作中经常需要配置客户端开发人员对接接口,有时候对接地不太顺利,因此需要经常性地对公司 APP 进行抓包看请求,找出具体的原因. 在公司中开发使用的 Windows 台式电脑, ...
- 复刻smartbits的国产网络测试工具minismb-网络连接数测试方法
复刻smartbits的网路性能测试工具MiniSMB,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数和最 ...
- Linux编辑启动停止重启springboot jar包脚本
springboot的配置文件中,配置文件的名字都有各自的意义跟用途 dev 开发环境 prod 生产环境(默认) test 测试环境 加载指定配置文件 --spring.profiles.activ ...
- POJ 3692 Kindergarten(最大团问题)
题目链接:http://poj.org/problem?id=3692 Description In a kindergarten, there are a lot of kids. All girl ...
- 南方IT教材反馈
为了进一步提升教材质量,大家可以在底部留言区反馈您发现的任何问题或建议,谢谢! 最终我们将从所有读者中找出幸运读者发放奖品! 好教材也有我的一份功劳!
- Spring MVC 不能正常获取参数的值
最近在开发时遇到一个非常奇怪的问题,在tomcat8中使用Spring MVC框架,在Controller中的方法参数无法正常获取到相应的值,将tomcat版本换成7.0就解决了. 记录以下解决过程, ...
- java设计模式-----21、备忘录模式
概念: Memento模式也叫备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式,它的作用是保存对象的内部状态,并在需要的时候(u ...