缺失数据在数据集中是一个常见问题。虽然移除含有缺失数据的行或列可以是一个简单的解决方案,但这通常会以丢失宝贵信息为代价。例如,如果某一列只有少量缺失值,或者某一行在许多值中仅缺少一个,那么完全移除它们可能会大大缩小数据集的规模和信息量。解决这一挑战并保留数据的一种方法是填充(imputation),它涉及用合理的值来补齐缺失数据。基础值填充策略依赖于使用同一列(特征)中非缺失值的统计汇总信息。其想法是用一个代表该特征“中心”或“最典型”的值来填补空白。接下来我们看看三种最常用的方法:均值填充、中位数填充和众数填充。使用均值填充均值就是一组数字的算术平均值。计算方法是将一列中所有可用值相加,然后除以这些值的数量。$$ \text{均值} = \frac{\text{所有非缺失值的和}}{\text{非缺失值的数量}} $$何时使用: 均值填充通常用于数值型列(如身高、温度或价格),这些数据没有极端异常值,并且大致呈对称分布(如钟形曲线)。例子: 假设有一个'Temperature'(温度)列,值为 [25, 28, NaN, 30, 27]。找到非缺失值:25, 28, 30, 27。计算总和:$25 + 28 + 30 + 27 = 110$。计算非缺失值的数量:4。计算均值:$110 / 4 = 27.5$。填充缺失值:将 NaN 替换为 27.5。该列变为 [25, 28, 27.5, 30, 27]。注意事项: 均值对异常值很敏感。单个非常高或非常低的值会大大拉动均值向其方向偏移,这可能使填充值不太能代表典型的数据点。使用中位数填充中位数是数据集中按升序排列后的中间值。如果值的数量是偶数,则中位数是中间两个值的平均值。何时使用: 中位数填充也用于数值型列。当数据包含明显的异常值或呈偏斜分布(即一侧有长尾)时,它通常优于均值。中位数受极端值的影响较小。例子: 假设有一个'Income'(收入)列,值为 [45000, 50000, NaN, 48000, 150000]。值 150000 是一个异常值。找到非缺失值:45000, 50000, 48000, 150000。对这些值排序:[45000, 48000, 50000, 150000]。找到中间位置:由于有4个值,中间位置在第2个和第3个值之间(48000 和 50000)。计算中位数:$(48000 + 50000) / 2 = 49000$。填充缺失值:将 NaN 替换为 49000。该列变为 [45000, 50000, 49000, 48000, 150000]。请注意,中位数(49000)比均值更接近大部分数据(45000、48000、50000)。均值将是 $(45000 + 50000 + 48000 + 150000) / 4 = 293000 / 4 = 73250$,它受到异常值的严重影响。使用众数填充众数是数据集中出现频率最高的值。一个数据集可以有一个众数、多个众数(多模态),或者如果所有值出现的频率相同,则没有众数。何时使用: 众数填充是类别型列(如“颜色”、“国家”、“是/否”)的标准选择。您无法为非数值类别计算有意义的均值或中位数。它有时也可用于数值离散数据,并且值代表计数或特定类别(例如,汽车的车门数量)。例子: 假设我们有一个'Shirt_Color'(衬衫颜色)列:['Blue', 'Red', 'Blue', NaN, 'Green', 'Red', 'Blue']。找到非缺失值:['Blue', 'Red', 'Blue', 'Green', 'Red', 'Blue']。计算每种颜色的频率:蓝色:3次红色:2次绿色:1次找到众数:'Blue' 是出现频率最高的颜色。填充缺失值:将 NaN 替换为 'Blue'。该列变为 ['Blue', 'Red', 'Blue', 'Blue', 'Green', 'Red', 'Blue']。{"layout": {"title": "衬衫颜色频率(填充前)", "xaxis": {"title": "颜色"}, "yaxis": {"title": "数量"}, "bargap": 0.2}, "data": [{"type": "bar", "x": ["Blue", "Red", "Green"], "y": [3, 2, 1], "marker": {"color": ["#228be6", "#fa5252", "#40c057"]}}]}用于确定“Shirt_Color”示例中众数(“Blue”)的频率计数。注意事项: 如果类别型列有多个众数(例如,“蓝色”和“红色”都出现3次),您可能需要随机选择一个众数,或者使用更精密的填充方法。如果没有明确的众数,此方法可能信息量不足。选择正确的基础值填充方法这里有一个简单的指导原则:数值型数据:如果数据大致对称且没有明显的异常值,请使用均值。如果数据有异常值或呈偏斜分布,请使用中位数。类别型数据: 使用众数。重要局限虽然均值、中位数和众数填充简单快速,但它们也有局限性:关系失真: 用一个单一常数替换所有缺失值可能会扭曲变量之间的关系。例如,如果您基于总体中位数填充缺失的“年龄”,您将失去“年龄”与“收入”等其他变量之间可能存在的任何关联。方差减少: 填充会降低数据中固有的自然变异性,因为您添加的是相同的值。这可能会影响统计测试的结果以及依赖方差的机器学习模型的性能。忽略不确定性: 这些方法将填充值视为真实值,从而忽略了与猜测缺失数据点相关的不确定性。这些基础技术是一个起点。存在更高级的方法(如回归填充或K-近邻填充),它们尝试根据其他列预测缺失值,通常能提供更准确的结果,但这些方法更复杂,将在更高级的材料中介绍。目前,理解并应用均值、中位数和众数填充为在许多常见情况下处理缺失数据打下了良好的根基。