K最近邻算法——近朱者赤,近墨者黑

K最近邻算法的原理正如标题所说——近朱者赤近墨者黑,我们数据集一半是朱(下图浅色点),一般是墨(下图深色点)。a638a118e4fc456e9d8527cd83ee3b59.jpg

 

现在有个一个新的数据点,我们如何判断它属于那一类呢?对于K最邻近算法来说,新数据点离谁近,就和谁属于同一类3224856917b24aaea5664ef1d98e76a2.jpg

 如上图所示,我们选的最邻近数为1,但是我们如果在训练模型过程中让最近邻数等于1的话,那么就很可能犯一叶障目不见泰山的错误,万一新数据点最近的数据恰好是个测试错误点呢?所以我们要增加最近邻的数量,例如把最近邻数增加到3,然后让新数据点的分类和3个当中最多的数据点所处的分类一致,如下图所示676e9e9fd41d40d896db06771aeafd41.jpg

 当我们令新数据点的最近邻数为3时,在于新数据点最近的三个点中,有两个是深色,一个是浅色,这样一来,K最近邻算法把新数据点放到深色的分类中。

在scikit-learn中,内置了若干玩具数据集(Toy Datasets),还有一些API让我们展示。522ba929f6cb4cbe9dfea8d1e491ff8b.png

 在这段代码中,我们用scikit-learn的make_blobs函数生成一个样本数量为200,分类为2的数据集,并将其复制给x,y,然后我们用matplotlib讲数据用图形表示出来,如下图所示

fe0801e18b4f4f298152ec0483932fbe.png

 make_blods生成的数据集一共有两类,其中一类用深色表示,另一类用浅色表示。我们这里生成的数据集,可以看作为机器学习的训练数据集,是已知数据,我们基于这些数据用算法进行模型训练,然后再对未知数据进行分类和回归。下面我们用K最近邻算法来拟合这些数据,输入代码如下2e49dd09ec1344d59da48635378694fc.png

 运行结果为9f165d4eb2c342bd869b840cfa35f862.png

 

 从中我们可以看出,K最近邻算法基于数据集创建了一个分类模型,就是图中粉色区域和灰色区域组成部分,如果有新数据输入的话,模型就会自动讲新数据分到对应分类中。

假设有一个新数据点,它的两个特征值分别是6.75和4.82,我们来测试一下模型能不能讲它放到正确的分类中,输入一下代码

0c144dbf9ec64ca4a7fdc0cf73ba433d.png

 得到图形7ce3f20ae01e41569e06ffdf3a8e14a2.png

 图中五角星就代表了新数据点所在位置,可以看出K最近邻算法将它放在了下方区域,和浅色数据归为一类。我们再验证一下,输入代码

a2b366a070e5460b87f3448e4fcb5ebd.png

 可以看出,K最近邻算法工作成果还是很不错的。

下面 我们用K最近邻算法处理多元分类任务

接下来,为让任务难度加大,我们修改make_blods的centers参数,把数据类型增加到5个,同时修改n_samlpes参数,把样本量也增加到500个,输入代码c120cf6d6d004beda62d3e352b29883d.png

 得到结果e066088df6a64737b2e1a3fb3f6e4615.png

 我们再次用K最近邻算法建立模型拟合这些数据7e65533f4c9e45618a2faba46e3c72c2.png

 得到结果79a4486c681e4dba8934712095a39c10.png

 从中可以看出,K最近邻算法仍然把大部分数据点置于正确分类,小部分进入了错误分类,这些错误分类的数据点基本都是相互重合的位于图像中心位置的点。为了查看模型正确率 我们运行一下代码e02fcb6ce9fe42b790e9860a54b499a4.png

 可以看出,这个结果是相当不错的。

明天 我会接着使用K最近邻算法来进行回归分析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值