机器学习实战(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中.然后 ...
随机推荐
- 解析BroadcastReceiver之你需要了解的一些东东
前些天把四大组件之一的Service扯了一遍,今天就要开始谈谈它的弟兄BroadcastReceiver了.写到这里我挺纠结的,因为广播接收者确实比较简单,但是各位就不要以为简单的就不内涵,也许我们慢 ...
- wordpress添加面包屑
第一步:在functions.php中添加如下代码 // 面包屑导航 function get_breadcrumbs() { global $wp_query; if ( !is_home() ){ ...
- Java判断一个时间是否在时间区间内
package com.liying.tiger.test; import java.text.ParseException; import java.text.SimpleDateFormat; i ...
- Tensorflow运用RNN注意事项
一.学习单步的RNN:RNNCell 如果要学习TensorFlow中的RNN,第一站应该就是去了解“RNNCell”,它是TensorFlow中实现RNN的基本单元,每个RNNCell都有一个cal ...
- Java设计模式之工厂方法模式(转) 实现是抽象工厂?
Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织 2009-02-25 来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章] ...
- 通过DataTrigger绑定Tag属性值进行判断(.net 3.5的环境)
如下,在UserControl中通过Tag传递不同的值,然后在Style中使用DataTrigger进行判断, <UserControl Style="{DynamicResource ...
- Tomcat学习总结(1)——Tomcat入门教程
一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下: 范例:将JavaWebDemoProject这个Ja ...
- rails中accepts_nested_attributes_for应用
Model: class Blog < ActiveRecord::Base has_many :strip_rules accepts_nested_attributes_for :strip ...
- WEB开发框架性能排行与趋势分析
WEB开发框架性能基准测试解读与趋势分析 TechEmpower的<Web Framework Benchmarks>性能基准测试,是关注Web开发框架发展的重要途径.但是内容数据众多,每 ...
- 并发编程之 线程协作工具 LockSupport
前言 在前面的文章中,我们介绍了并发工具中的4个,Samephore,CyclicBarrier,CountDownLatch,Exchanger,但是我们漏了一个,非常的好用的工具,楼主在这里必须加 ...