改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了


前一段时间介绍了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算法详解的更多相关文章

  1. 机器学习实战之kNN算法

    机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python版本 (2)numpy 1.1 ...

  2. 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验

    实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...

  3. 《机器学习实战》kNN算法及约会网站代码详解

    使用kNN算法进行分类的原理是:从训练集中选出离待分类点最近的kkk个点,在这kkk个点中所占比重最大的分类即为该点所在的分类.通常kkk不超过202020 kNN算法步骤: 计算数据集中的点与待分类 ...

  4. 机器学习实战 之 KNN算法

    现在 机器学习 这么火,小编也忍不住想学习一把.注意,小编是零基础哦. 所以,第一步,推荐买一本机器学习的书,我选的是Peter harrigton 的<机器学习实战>.这本书是基于pyt ...

  5. 《机器学习实战》KNN算法实现

    本系列都是参考<机器学习实战>这本书,只对学习过程一个记录,不做详细的描述! 注释:看了一段时间Ng的机器学习视频,感觉不能光看不练,现在一边练习再一边去学习理论! KNN很早就之前就看过 ...

  6. [置顶] MVC输出缓存(OutputCache参数详解)

    1.学习之前你应该知道这些 几乎每个项目都会用到缓存,这是必然的.以前在学校时做的网站基本上的一个标准就是1.搞定增删改查2.页面做的不要太差3.能运行(ps真的有这种情况,答辩验收的时候几个人在讲台 ...

  7. [置顶] Android开发之MediaPlayerService服务详解(一)

    前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState.ProcessState负责打开Binder 驱动,每个进程只有一个.而 IPCThre ...

  8. [置顶] 安卓UI组件之ListView详解

    ListView是很常见的一个UI组件,在许多App中都很常用,其意思就是可滚动的列表,使用ListView必须使用Adapter(适配器),常用的适配器友谊ArrayAdapter,SimpleAd ...

  9. 机器学习之路--KNN算法

    机器学习实战之kNN算法   机器学习实战这本书是基于python的,如果我们想要完成python开发,那么python的开发环境必不可少: (1)python3.52,64位,这是我用的python ...

随机推荐

  1. 修改dbwr后台进程数量

    批量执行脚本时,批量数据写回到数据库:从EM中查看到有较多的dbwr的IO请求   查看后台dbwr的进程数量 select * from v$bgprocess 在查询结果中paddr的字段为非'0 ...

  2. Delphi or函数的用法

    function GetFlag(a: string): Integer;var I: Integer;begin Result := 0; for I := 0 to 3 - 1 do begin ...

  3. Spring4整合Hibernate4

    首先,要明确Spring整合Hibernate可以做什么? 答案是: 1.由IOC容器来管理Hibernate的SessionFactory 2.让Hibernate使用上Spring的声明式事务 整 ...

  4. ECshop 每个数据库表结构说明

    ecs_account_log // 用户账目日志表 ecs_activity // 活动表(代码,名称,开始,结束,描述) ecs_ad // 广告表(位置,类型,名称,链接,图片,开始,结束,广告 ...

  5. MSSQL 2005数据库与SP4补丁安装

    Sql Server 2005 正确安装之前的win7配置: http://wenku.baidu.com/link?url=6T3jzVnu2XY_sfqfe9ZqQ_6dUOdrZwHc83baW ...

  6. OLAP、OLTP的介绍和比较 via csdn

    OLAP.OLTP的介绍和比较 数据处理大致可以分成两大类: OLTP(On-Line Transaction Processing)联机事务处理 也称为面向交易的处理系统,其基本特征是顾客的原始数据 ...

  7. oracle-Oracle试题

    ylbtech-doc:oracle-Oracle试题 oracle-Oracle试题 1.A,返回顶部 01.{Oracle题目}你判断下面语句,有什么作用?(选择1项)     GRANT upd ...

  8. HDU 5765 Bonds 巧妙状压暴力

    题意:给一个20个点无向连通图,求每条边被多少个极小割集包括 分析:极小割集是边的集合,很显然可以知道,极小割集恰好吧原图分成两部分(这个如果不明白可以用反证法) 然后就是奉上官方题解:http:// ...

  9. 一个【wchar_t】引发的学案

    今天在查cout  wcout区别的时候,看到一篇博客(http://blog.csdn.net/hikaliv/article/details/4570956) 里面讲到了wchar_t ----- ...

  10. Windows安装pomelo过程

    安装总要出点状况的.操作系统是win7 64bit. 为了保证顺利,打开的是VS2012命令行提示.运行 npm install -g pomelo 经过一系列输出,最后安装提示完成了.但是输入 po ...