假设我们有一些特征
压力、体积、温度、强度、质量、尺寸、...
问题是,我没有一整套这些信息。我不能把未知的特征归零,因为它是有意义的。例如,如果我不知道温度,则无法将其设置为 T=0。换句话说,如何在 T=0 和 T=unknown 之间产生差异
假设我们有一些特征
压力、体积、温度、强度、质量、尺寸、...
问题是,我没有一整套这些信息。我不能把未知的特征归零,因为它是有意义的。例如,如果我不知道温度,则无法将其设置为 T=0。换句话说,如何在 T=0 和 T=unknown 之间产生差异
听起来您正在处理 Missing Data。缺失数据可以通过两种方式处理:(1) 删除值(行或列)或 (2) 执行插补以替换缺失值。在确定处理这些丢失数据的策略之前,您应该确定数据是如何丢失的。
完全随机缺失 (MCAR) 意味着有和没有缺失值的观测值没有差异。换句话说,所有类别的数据丢失概率都是相同的(在分类问题中)。
随机缺失 (MAR) 意味着有和没有缺失值的观察结果存在系统差异,但这种差异与一些观察到的数据有关。例如,如果您有压力和体积,也许不太可能测量温度。
非随机缺失 (MNAR) 意味着缺失值的概率因未知原因而变化。
诊断出缺失后,您可以相应地选择适当的技术。这可能是删除数据、估算数据或两者的组合(即删除一列并估算另一列)。
删除数据
可以应用成对删除来删除所有缺失值的行。训练只会发生在具有完整数据的行上。如果数据不是 MCAR,这将引入偏差,并且不允许您对包含缺失数据的未来数据进行预测。
或者,如果缺失值的百分比很高,则可以删除整个特征。应该探索这对模型的影响。
插补
如果您有兴趣保留所有数据,可以使用插补策略来填充缺失值。Sklearn 有一个SimpleImputer,在插补列时有 4 种策略可供选择:填充该列中的“均值”、“中位数”或“最频繁”值或应用“常数”。例如,通过使用常量,您可以用字符串“unknown”表示未知值。我注意到您在问题中提到了数值。对于数值变量,添加一个新列来指示缺失数据可能是合适的(取决于缺失的模式)。这可用作MNAR 插补技术。
插值可用作一种插补技术,将缺失数据外推为其他观测值的函数。您没有提及您要建模的内容,但根据您提供的功能,这可能是合适的。
如果您正在处理时间序列数据,您应该探索特定于时间序列问题的插补技术,例如最后一次观察结转 (LOCF),它将缺失值替换为最后一次观察到的值。
其他资源
您还可以将K-Nearest Neighbors视为一种插补方法。它可以识别K个邻居中最频繁的值,其中接近度是基于观察值之间的距离。在具有大量二进制特征的数据上使用它时要小心。另一个要探索的主题可能是更高级技术的多重插补。
一些学习算法可以像这样处理缺失值,即它们不会像对待常规值一样对待它们。实际上他们会忽略它们,但他们可以考虑实例中存在的其他常规值。
Weka ML 工具包可以正确处理缺失值。
您可能需要进行主成分分析以确保您的数据中没有显着的相关性(对于缺失值)。我的意思是,如果温度和压力是相关的(一个总是高,另一个低),但是当温度丢失时,您只需将其设为中等,那么您可能会为该数据引入偏差。