机器学习实战__KNN1
KNN的算法工作原理:
存在一个训练样本集合,样本集中每个数据都有确定的标签(分类),即我们知道样本集中每一数据与所属分类的对应关系。输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中K的出处,通常K是不大于20的整数。最后,选择K个最相似数据中出现次数最多的标签,作为新数据的分类。
一个KNN实战入门例子:
aaarticlea/png;base64,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" alt="" width="608" height="191" />
from numpy import *
import operator def createDataSet():
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['A','A','B','B']
return group, labels 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):
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源码
以上代码的流程说明:
用一个简单的训练集,得到简单的一个模型,如图:
aaarticlea/png;base64,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" alt="" width="335" height="288" />
import KNN group,labels = KNN.createDataSet()
var = KNN.classify0([1,0],group,labels,3) print(var)
main.py
以上main.py调用KNN.py(即import KNN.py模块),进行测试输入点,通过这个简单的模型得到一个预测,输出标签(类别)
结果:
aaarticlea/png;base64,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" alt="" width="653" height="105" />
机器学习实战__KNN1的更多相关文章
- 机器学习实战笔记(Python实现)-08-线性回归
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 机器学习实战笔记(Python实现)-06-AdaBoost
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 机器学习实战笔记(Python实现)-05-支持向量机(SVM)
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 机器学习实战笔记(Python实现)-04-Logistic回归
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 机器学习实战笔记(Python实现)-03-朴素贝叶斯
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 机器学习实战笔记(Python实现)-01-K近邻算法(KNN)
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 机器学习实战笔记(Python实现)-02-决策树
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 机器学习实战笔记(Python实现)-00-readme
近期学习机器学习,找到一本不错的教材<机器学习实战>.特此做这份学习笔记,以供日后翻阅. 机器学习算法分为有监督学习和无监督学习.这本书前两部分介绍的是有监督学习,第三部分介绍的是无监督学 ...
- 《机器学习实战》 code debug
摘要:最近在看<机器学习实战>,在code的过程中总是会报一些小错误,所以发下debug过的地方:由于是跳着看的,所以只是其中一部分,希望之后能把这本书我遇见的全部错误都在此更正下. 内容 ...
随机推荐
- Session深入理解
Session是在什么情况下产生的 客户端访问服务器端,服务器端为每个用户生成一个唯一的sessionId,是这样吗?sessionId的作用是什么? http://www.cnblogs.com/s ...
- xls和xlsx
xls XLS 就是 Microsoft Excel 工作表,是一种非常常用的电子表格格式.xls文件可以使用Microsoft Excel打开,另外微软为那些没有安装Excel的用户开发了专门的 ...
- XMPP基础
概要 1.即时通讯技术简介2.XMPP诞生的由来3.XMPP特点4.XMPP的基本结构5.XMPP工作原理6.XMPP的优缺点7.OSI七层模型8.IP地址.端口号.传输协议9.TCP和UDP的区别1 ...
- angularJS学习手册(1)
欢迎来到augularJS的学习 一.什么是angularJS? angular的英文意思是角,为什么要叫angular我也不知道. AngularJS是一个MV*(Model-View-Whatev ...
- firebug js版
1.有些时候如 ie6 7 8 你觉得F12 不好用的话 你可以直接 把这两个js 引用到html 里面 <script src="https://getfirebug.com/fi ...
- CentOS6.5 下 Mysql5.7主从复制
包下载http://url.cn/WrNg5S 主数据库:192.168.161.129 从数据库1:192.168.161.130 从数据库1:192.168.161.138 MySQL安装地址:/ ...
- .net发邮件
// 引入命名空间 using System.Net; using System.Net.Mail; SmtpClient smtp = new SmtpClient(); //实例化一个SmtpCl ...
- 如何使用Instruments诊断App(Swift版):起步-b
无论你写过许多iOS应用,还是刚刚开始你的第一个应用,毫无疑问,你都会想出一些新点子,或者想去弄明白你该怎么做,来让你的app变得更好. 除去添加新特性来优化你的应用,有一件事是所有好的开发者都回去做 ...
- 减少JAVA GC
减少GC开销的措施:程序的运行会直接影响系统环境的变化,从而影响GC的触发.若不针对GC的特点进行设计和编码,就会出现内存驻留等一系列负面影响.为了避免这些影响,基本的原则就是尽可能地减少垃圾和减少G ...
- Mesh绘制雷达图(UGUI)
参考资料:http://www.cnblogs.com/jeason1997/p/5130413.html ** 描述:雷达图 刷新 radarDate.SetVerticesDirty(); usi ...