本博客参考书籍:《scikit-learn机器学习:常用算法原理及编程实战》

数据集简介

数据集下载地址:kaggle官网

768个样本,8个特征
在这里插入图片描述
数据集的前5组数据如图,其中前8列为特征值,第9列Outcome表示是否患有糖尿病

数据集加载与分割

在这里插入图片描述

我们查看数据集中阴性与阳性个体数
在这里插入图片描述
我们将数据集分为数据集和标签集,然后划分为训练集和测试集
在这里插入图片描述

建立模型,进行评分

在这里插入图片描述
从上面我们可以看出,不仅对训练集的效果不好(0.86)而且对测试集的效果也不好(0.71),这是一个欠拟合现象,我们建立的模型过于简单,我们要尝试优化模型,但是好像又不知道从何下手

实际上,knn算法并不是对于所有问题都是能有一个很好的解,对于这个预测问题,或许使用Knn算法本来就不是个很好的选择,下面我们继续通过分析来看看为什么这么说

knn算法在该问题上的弊端

为了能够直观地看出Knn算法的问题,我们将数据点用图示的形式表示出来,下面我们选择原数据集中的2个特征,观察其特征
在这里插入图片描述

在这里插入图片描述
运行结果如图
在这里插入图片描述

上面的红色代表未患病,绿色代表患病。我们可以看到,如果使用knn算法,假设现在有一个样本点在数据集中过于密集的区域,那么它的患病邻居多呢?还是未患病邻居多?显然这很难说,所以使用Knn算法在这个问题上进行分类不是个很好的选择

源码

笔者将.ipynb文件放在了码云上:knn算法

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐