你一定听说过这句著名的数据科学名言:
在数据科学项目中, 80% 的时间是在做数据处理。
如果你没有听过,那么请记住:数据清洗是数据科学工作流程的基础。机器学习模型会根据你提供的数据执行,混乱的数据会导致性能下降甚至错误的结果,而干净的数据是良好模型性能的先决条件。当然干净的数据并不意味着一直都有好的性能,模型的正确选择(剩余 20%)也很重要,但是没有干净的数据,即使是再强大的模型也无法达到预期的水平。
在本文中将列出数据清洗中需要解决的问题并展示可能的解决方案,通过本文可以了解如何逐步进行数据清洗。
缺失值
当数据集中包含缺失数据时,在填充之前可以先进行一些数据的分析。因为空单元格本身的位置可以告诉我们一些有用的信息。例如:
- NA值仅在数据集的尾部或中间出现。这意味着在数据收集过程中可能存在技术问题。可能需要分析该特定样本序列的数据收集过程,并尝试找出问题的根源。
- 如果列NA数量超过 70–80%,可以删除该列。
- 如果 NA 值在表单中作为可选问题的列中,则该列可以被额外的编码为用户回答(1)或未回答(0)。
missingno
这个python库就可以用于检查上述情况,并且使用起来非常的简单,例如下图中的白线是 NA:
import missingno as msno
msno.matrix(df)
对于缺失值的填补计算有很多方法,例如:
- 平均,中位数,众数
- kNN
- 零或常数等
不同的方法相互之间有优势和不足,并且没有适用于所有情况的“最佳”技术。具体可以参考我们以前发布的文章
异常值
异常值是相对于数据集的其他点而言非常大或非常小的值。它们的存在极大地影响了数学模型的性能。让我们看一下这个简单的示例:
在左图中没有异常值,我们的线性模型非常适合数据点。在右图中有一个异常值,当模型试图覆盖数据集的所有点时,这个异常值的存在会改变模型的拟合方式,并且使我们的模型不适合至少一半的点。
对于异常值来说我们有必要介绍一下如何确定异常,这就要从数学角度明确什么是极大或极小。
大于Q3+1.5 x IQR或小于Q1-1.5 x IQR都可以作为异常值。IQR(四分位距) 是 Q3 和 Q1 之间的差 (IQR = Q3-Q1)。
可以使用下面函数来检查数据集中异常值的数量:
完整文章:
https://www.overfit.cn/post/7728efa2841148bdbb184a6cdd7aaca3