算法代码[置顶] 机器学习实战之KNN算法详解
改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了
前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用的匹配技巧。我们都知道python中有Numby和Scipy这两个库,还有前段时间写的matplot库,绘图用的,大家可以参考下,实际这个算法是看懂之前的一些算法的实现。
上面我就简单介绍下这个算法实现,首先我们先肯定一个事前准备好的矩阵,这个多是事前聚类出来的或者通过专家估计出来的值。
为了这个分类矩阵和标签写一个函数,这里我们把它称为createDataSe:
上面给出这个函数的代码:
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
看这篇博客的同时最好配有《机器学习实战》这本书,这本书的译者其中一个是现在项目的一个人参与者,在书中我们可以看到这样的图片:
这样很明确的我们可以看到这4个点 和其对应的标签。
所谓KNN即我们新来一个测试点和之前我们做好标记的点计算距离,然后采取距离最近的标签作为该测试点的标签,当然你可能觉得原来是这么简单的货色,是的这个朴素的思惟,在当今的各种推荐系统,以及广告系统中,依然有所使用。
然后我们继续讲解下一段简单的代码,有了参考点,下一段当然是来测试点了,
上面我就先贴上代码:
“一年之计在于春”,十几岁的年纪,正是人生的春天,别辜负了岁月老人的厚爱与恩赐。行动起来,播种梦想吧!
def classify(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]
diffMat = tile(inX, (dataSetSize, 1))-dataSet
print(diffMat, '\n')
sqDiffMat = diffMat**2
print(sqDiffMat)
sqDistances = sqDiffMat.sum(axis=1)
print(sqDistances)
distance = sqDistances**0.5
sortedDistIndices = distance.argsort()
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistIndices[i]]
classCount[voteIlabel]= classCount.get(voteIlabel, 0)+1
sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse = True)
return sortedClassCount[0][0]
当然这个有书而且很仔细的童鞋会发现我多了几行打印代码,第一行是失掉先验数据的列数,然后第二行是产生一个与该矩阵一样巨细的矩阵并和原矩阵相减,然后失掉测试点与4个标记点的坐标差,下一行是打印,接下来就是我们将这个矩阵停止平方,然后将所有数据相加,合为一个数据,然后将其开平方,接距离停止排序,产生一个排名。
这样所有点到测试点的距离排名就都有了。
下一段for循环开始是选择前k个最近距离对该测试点停止投票,最后再次将投票结果停止排序,输出得票率最高的一个点作为最后的结果。这就是终究的标签结果。
不得不感叹一句这么短的代码完成了这多功能!
最后我再说点关于这一句的用法,这个是为了不返回异常如果没有,则增长一项,有了就增长1,这当然是最简单的KNN算法思惟的论述,但是与实际应用差了十万八千里。
classCount.get(voteIlabel, 0)
呵呵,这个也不是说这玩意没用,只是真正使用的时候多是高维空间的特征不是二维空间的特征没办法画出在空间中的点的位置。好了就说这么多吧。
附上测试调用的代码,该代码完成了(0,0)点的分类:
group, labels = createDataSet() print(classify([0, 0], group, labels, 3))
对了还得给出程序运行的截图:
文章结束给大家分享下程序员的一些笑话语录:
真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。
---------------------------------
原创文章 By
算法和代码
---------------------------------
算法代码[置顶] 机器学习实战之KNN算法详解的更多相关文章
- 机器学习实战之kNN算法
机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python版本 (2)numpy 1.1 ...
- 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验
实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...
- 《机器学习实战》kNN算法及约会网站代码详解
使用kNN算法进行分类的原理是:从训练集中选出离待分类点最近的kkk个点,在这kkk个点中所占比重最大的分类即为该点所在的分类.通常kkk不超过202020 kNN算法步骤: 计算数据集中的点与待分类 ...
- 机器学习实战 之 KNN算法
现在 机器学习 这么火,小编也忍不住想学习一把.注意,小编是零基础哦. 所以,第一步,推荐买一本机器学习的书,我选的是Peter harrigton 的<机器学习实战>.这本书是基于pyt ...
- 《机器学习实战》KNN算法实现
本系列都是参考<机器学习实战>这本书,只对学习过程一个记录,不做详细的描述! 注释:看了一段时间Ng的机器学习视频,感觉不能光看不练,现在一边练习再一边去学习理论! KNN很早就之前就看过 ...
- [置顶]
MVC输出缓存(OutputCache参数详解)
1.学习之前你应该知道这些 几乎每个项目都会用到缓存,这是必然的.以前在学校时做的网站基本上的一个标准就是1.搞定增删改查2.页面做的不要太差3.能运行(ps真的有这种情况,答辩验收的时候几个人在讲台 ...
- [置顶] Android开发之MediaPlayerService服务详解(一)
前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState.ProcessState负责打开Binder 驱动,每个进程只有一个.而 IPCThre ...
- [置顶] 安卓UI组件之ListView详解
ListView是很常见的一个UI组件,在许多App中都很常用,其意思就是可滚动的列表,使用ListView必须使用Adapter(适配器),常用的适配器友谊ArrayAdapter,SimpleAd ...
- 机器学习之路--KNN算法
机器学习实战之kNN算法 机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python ...
随机推荐
- Liunx 配置IDE
如果你还没装编译环境或自己不确定装没装,不妨先执行 sudo apt-get install build-essential 如果你已经了解一些 vim 的知识,而且想用它来编辑源代码,那么我们不妨装 ...
- linux下利用backtrace追踪函数调用堆栈以及定位段错误
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的. 在glibc ...
- again
建立一个IPC连接: net use \\192.168.0.5\ipc$ "123456" /u:administrator
- POJ2987 Firing 最大权闭合图
详情请参考http://www.cnblogs.com/kane0526/archive/2013/04/05/3001557.html 值得注意的地方,割边会把图分成两部分,一部分和起点相连,另一部 ...
- Windows下使用NCL(Cygwin模拟Linux环境)
参考自:http://bbs.lasg.ac.cn/bbs/thread-37043-1-1.html 1.下载 所需文件均可在此下载:http://yunpan.cn/cQsvAEe3Axs2Z ...
- 测试xss和xsf
xss注入攻击: 123123123 被动注入: 1231231231231231 主动注入: 对不起,你需要登录才能评论 用户名 密码
- python学习之dict的items(),values(),keys()
Python的字典的items(), keys(), values()都返回一个list >>> dict = { 1 : 2, 'a' : 'b', 'hello' : 'worl ...
- poj2396 Budget(有源汇上下界可行流)
[题目链接] http://poj.org/problem?id=2396 [题意] 知道一个矩阵的行列和,且知道一些格子的限制条件,问一个可行的方案. [思路] 设行为X点,列为Y点,构图:连边(s ...
- [Hive - LanguageManual] Sampling
Sampling Syntax Sampling Bucketized Table Block Sampling Sampling Syntax 抽样语法 Sampling Bucketized T ...
- 介绍Google App Engine
Google App Engine是一个网络应用托管服务(web application hosting service).所谓网络应用(By web application),我们的意思的可以通过网 ...