机器学习实战——k近邻算法

学习都得有输出,这篇博客用于做自己的日常学习记录,同时也对外开放分享自己的个人学习笔记。

这是我正在看机器学习实战这本书,是一本很经典的机器学习与python的书,书中未涉及到tensorflow等框架,但是这些框架基本上都是基于深度学习的,我准备在python的机器学习以及matlab数学建模的算法上探索一翻,体会数学之美。当然,书中有很多的库和函数,这些都是很难记住,即使一边记住了后面也一定会忘记,本人也只是简单读了读其代码,体会其中的思想,而并没有深入的去死记这些代码是如何实现。因此在学习中我给出如下的建议:1.了解该算法的大概原理,知道他能去做什么;2.参与几个该算法的实战,尝试用现有的代码去实现。

什么是kNN近邻算法,这个我之前也有过学习,只是将数学知识应用于统计学习当中,kNN应该是机器学习中的最简单的算法了。话说什么是kNN?如果你有一定的机器学习基础,那么你一定会知道聚类,当然如果你不知道也没有关系,我们先简单了解一下。

如图所示,你可以清楚的看到绿色,红色和蓝色混在一起,但是似乎相同的颜色更加紧凑。我们的kNN算法就是涉及到一个分类的问题。分类有很多种,这里的分类问题是需要在有一个已分好类的数据集,可以用(x,y)表示,当然也可以用三维或这四维的坐标表示,我们这里只用二维坐标。

那么你可能会很好奇,都已经是分好类的了,不应该直接就能知道输入的是属于哪个类的了吗?

那么你就错了。虽然像上图已经是一个大概的分好类的了,但是你会发现它并没有一个分界线,如果处于边缘上,不好区分,那么我们怎么确认他是什么类别的呢?

因此,我们就需要借助算法来帮助我们了,kNN即最简单的分类方法。我们需要一堆已经标记好标签的数据,标签这里的意思就如上图,红色,绿色和蓝色就是不同的标签。

这里我们需要使用算法将所有的点与一个输入坐标的距离求解出来,就是普通的二维坐标两点求距离。然后我们需要选取最靠近这个输入点的k个点,比较哪个标签多。k这个数字是我们自己设定的,比如我设定k是4,那么如果有3个红色和1个蓝色的点是离输入点最近的几个点,那么离这个点最近的k个点中红色点最多,因此我们可以将该点分类到红色的点中去。

那么这就是机器学习kNN的基本算法了,我们给出其基本公式,其又叫做欧拉公式

d=\sqrt{\sum_{i=1}^{n}(xA_{i}-xB_{i})^{2}}

我们对上面的公式举一个例子,比如我需要知道点(0,0)和(1,2)之间的距离,那么我们可以得到如下计算公式:

d=\sqrt{(1-0)^{2}+(2-0)^{2}}=\sqrt{5}

注意,这个d是我们求的输入点与每个样本点的计算距离公式,然后我们会在所有的距离中找出最近的n个点,找出这个n个点中标签数量最多的那个,那么我们就预测输入点为该标签的一类。

在kNN算法的代码中,我们已经看到了有一个函数:classify0(inX, dataSet, labels, k) 这个函数,就是基本的分类算法。我们无需每次都去自己编写kNN算法,因此只需要在我们需要时去调用这个算法就行了。这里的参数,inX:需要被分类的输入量,dataSet:输入样本集,labels:每个样本集对应的标签,k:临近数。

现在你已基本了解了什么是kNN算法,也许你还不够理解,那么接下来让我们到实战中去体验这种算法。


未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值