python如何通过KNN来填充缺失值(knn,python,开发技术)

时间:2024-05-05 16:16:08 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    python%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87KNN%E6%9D%A5%E5%A1%AB%E5%85%85%E7%BC%BA%E5%A4%B1%E5%80%BC

KNN算法,又叫K近邻分类算法,是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。近邻算法就是将数据集合中每一个记录进行分类的方法。我们在样本数据有缺失需要填充的时候,可以使用K近邻算法来训练一个模型,然后让其预估缺失值,这就是python通过knn来填充缺失值的方法。

补充:scikit-learn中一种便捷可靠的缺失值填充方法:KNNImputer

在数据挖掘工作中,处理样本中的缺失值是必不可少的一步。其中对于缺失值插补方法的选择至关重要,因为它会对最后模型拟合的效果产生重要影响。

在2023年底,scikit-learn发布了0.22版本,此次版本除了修复之前的一些bug外,还更新了很多新功能,对于数据挖掘人员来说更加好用了。其中我发现了一个新增的非常好用的缺失值插补方法:KNNImputer。这个基于KNN算法的新方法使得我们现在可以更便捷地处理缺失值,并且与直接用均值、中位数相比更为可靠。利用“近朱者赤”的KNN算法原理,这种插补方法借助其他特征的分布来对目标特征进行缺失值填充。

使用KNNImputer需要从scikit-learn中导入:

先来一个小例子开开胃,data中第二个样本存在缺失值。

KNNImputer中的超参数与KNN算法一样,n_neighbors为选择“邻居”样本的个数,先试试n_neighbors=1。

可以看到,因为第二个样本的第一列特征3和第三列特征7,与第一行样本的第一列特征2和第三列特征8的欧氏距离最近,所以缺失值按照第一个样本来填充,填充值为4。那么n_neighbors=2呢?

此时根据欧氏距离算出最近相邻的是第一行样本与第四行样本,此时的填充值就是这两个样本第二列特征4和3的均值:3.5。

接下来让我们看一个实际案例,该数据集来自Kaggle皮马人糖尿病预测的分类赛题,其中有不少缺失值,我们试试用KNNImputer进行插补。

在这个数据集中,0值代表的就是缺失值,所以我们需要先将0转化为nan值然后进行缺失值处理。

在本文中,我们尝试用DiabetesPedigreeFunction与Age,对BloodPressure中的35个缺失值进行KNNImputer插补。

先来看一下缺失值都在哪几个样本:

可以看到现在BloodPressure中的35个缺失值消失了。我们看看具体填充后的数据:

到此,BloodPressure中的缺失值已经根据DiabetesPedigreeFunction与Age运用KNNImputer填充完成了。注意的是,对于非数值型特征需要先转换为数值型特征再进行KNNImputer填充操作,因为目前KNNImputer方法只支持数值型特征(ʘ̆ωʘ̥̆‖)՞。

本文:python如何通过KNN来填充缺失值的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何使用Orthomcl查找同源基因下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18