Machine learning 为什么在分类数据集中用-99999替换缺少的值

Machine learning 为什么在分类数据集中用-99999替换缺少的值,machine-learning,classification,Machine Learning,Classification,处理分类问题时,缺少用“?”表示的值,那么为什么是-99999呢 df.replace('?',-99999,inplace=True) 我们可以替换为任何非常大的数字,这样做的唯一目的是使其成为异常值,因为在大多数情况下,删除缺失的值会导致数据丢失这取决于您最终将如何使用此数据。从数据清洁度的角度来看,在数字列中包含字符串并不好,因此从数据表示的角度来看,用np.nan(afloat类型)或新的pd.NA替换可能是最好的主意。大多数型号不能使用这些值,但有些型号可以,例如xgboost。对于

处理分类问题时,缺少用“?”表示的值,那么为什么是-99999呢

df.replace('?',-99999,inplace=True)

我们可以替换为任何非常大的数字,这样做的唯一目的是使其成为异常值,因为在大多数情况下,删除缺失的值会导致数据丢失

这取决于您最终将如何使用此数据。从数据清洁度的角度来看,在数字列中包含字符串并不好,因此从数据表示的角度来看,用
np.nan
(a
float
类型)或新的
pd.NA
替换可能是最好的主意。大多数型号不能使用这些值,但有些型号可以,例如
xgboost
。对于无法处理缺失值的模型(或者当您不希望模型在内部处理它们时),您需要确定插补的最佳方式

使用实际数据范围之外的值(如-99999)进行插补,对于树模型来说基本上是好的:它们不关心比例,所以你实际上只是说它比其他任何东西都小。不过,在逻辑回归等参数模型中,这将严重扰乱参数估计,我强烈建议不要这样做。添加缺失指标会有所帮助,但我仍然怀疑插补值如此之大会出现数字问题,因此均值/中位数或基于模型的插补会更好