KNN算法的一个回归应用分析

介绍

在我所接触的机器学习算法中,KNN是一种相对来说较容易理解的算法,但是它在实际中仍有十分广泛的应用。KNN算法可以用于分类和回归问题,在分类问题中应用较多,虽然KNN很少用于回归问题,但对于连续的变量仍有很好的效果。下面我们来介绍KNN算法在回归问题中的应用以及如何用python实现KNN算法的应用案例。

一、案例引入

我们先看一个案例,这样可以更直观的理解KNN算法。数据如下表,其中包括10个人的身高、体重和年龄数据,然后预测第十一个人的体重。

为了更清晰地了解数据间的关系,我们用坐标轴将身高和年龄表示出来,其中横坐标为年龄(age)、纵坐标为身高(Height)。

通过上图可以看到,11点的值是需要求解的,那么怎么求呢?我们可以看到在图中11点更接近于5点和1点,所以其体重应该更接近于5点和1点的值,也就是在72-77之间,这样我们就可以大致得到11点的体重值。下面我们用算法来实现这一过程。

二、KNN算法工作

如上所述,KNN可以用于分类和回归问题,通过样本间的某些相似特征来进行预测未知元素的值,即“物以类聚”:相同或相似的事物之间具有一些相似的特征。

在分类问题中,我们可以直接将其最近的样本值作为预测结果,那么在回归问题中怎么计算最终的预测结果呢?就像上面的例子,11点取值介于72-77之间,最终结果应该取多少合适呢?一般来说,我们将其平均值作为最终的预测结果。

算法步骤

1、计算待测点到已知点的距离

2、选择距离待测点最近的K个点,k值为人工设置的,至于k值如何设置合适在后边讨论。在这个例子中,我们假设k=3,即点1、5、6被选择。

3、将点1、5、6的值取平均值作为最终的预测结果。即11点的Weight=(77+72+60)/3 = 69.66 kg

三、距离计算

算法第一步需要计算待测点与已知点之间的距离,计算距离的公式有很多种,例如常用的有欧氏距离、曼哈顿距离以及海明距离。

1、欧氏距离:在m维空间中两个点之间的真实距离

2、曼哈顿距离:使用它们的绝对差之和的实向量之间的距离

3、海明距离:用于分类变量,如果X与Y的值相同,距离D为0,否则D为1.

四、K值选择

K值代表最近邻的个数,k值的选择对预测结果有较大影响。

在上面的例子中,我们选择k=3时

最终的预测结果为

ID11 = (77+72+60)/3 ID11 = 69.66 kg

当我们选择k=5时

最终的预测结果为

ID 11 = (77+59+72+60+58)/5 ID 11 = 65.2 kg

我们可以看到k值不同结果也将不同,因此我们需要选择一个合适的k值来获得最佳的预测结果。我们的目标就是获得预测值与真实值之间最小的误差。

下面我们看一下k值与误差的关系曲线

由曲线可得,如果K值太小,则会发生过拟合;如果k值太大,则会发生欠拟合。因此我们根据误差曲线选择最佳k值为9,你也可以使用其他方法寻找最佳k值。

五、python实现代码

1、读取数据

2、处理缺失值

3、处理分类变量并删除ID列

4、划分训练集与测试

5、特征标准化

6、查看误差曲线

输出

由误差曲线可得我们选择k=7可以获得最优结果。

7、预测结果

结语:

在本文中我们讨论了KNN算法在回归问题中的应用,并用python将算法实现,KNN算法的学习相对简单,但效果也比较好。更多机器学习算法的学习欢迎关注我们。对机器学习感兴趣的同学欢迎大家转发&转载本公众号文章,让更多学习机器学习的伙伴加入公众号《python练手项目实战》,在实战中成长。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180909A0FKY700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券