对于 98% 的列都是空值的数据集,我们可以做什么?
What can we do with the dataset that 98 percent of the columns are null values?
我想在服务器停机时间发生之前预测它。为了实现这个目标,我从不同的数据源收集了很多数据。
其中一个数据源是度量数据,其中包含cpu-时间、cpu-百分比、内存使用等。但是,此数据集中的列的值为空。我的意思是 98% 的许多列都是空的。
在将数据应用于预测算法之前,可以使用什么样的数据准备技术来准备数据。
感谢任何帮助。
通常可以应用各种数据插补技术,但在 98% 为空值的情况下,我认为这不是正确的方法,您将从仅 2% 的可用信息中推断出空数据;这会在您的数据中产生大量偏差。我会选择这样的选项:按降序对行进行排序,这样具有最多非空列的行排在第一位。然后从已排序的行列表的开头确定一个截止点,例如,在选定的数据子集中仅丢失 20% 的数据。然后应用数据插补。但是,当然,这假设您在确定此截止值后将有足够数量的数据点(行),您可能没有并且每一行的数据都不会随机丢失(如果每一行的数据随机丢失,你根本不能使用这种排序方法)。
无论如何,我很难找到一种具体的方法来使用如此大量的缺失数据来构建有意义的模型。
如果我遇到您的情况,我的第一个选择是忽略此数据源。缺失的数据太多,无法成为任何 ML 算法的相关信息来源。
也就是说,如果您仍想使用此数据源,则必须填补空白。仅用 2% 的可用数据推断缺失数据几乎是不可能的,但是当您谈到超过 90% 的缺失数据时,我建议您看看非负矩阵分解 (NMF) here .
此算法的几个版本是 implemeted in R, also to have better results in inferring such a big amount of missing data you could read this paper,它使用时间序列信息(这可能是您的情况)和 NMF 以获得更好的结果。我 运行 一些测试高达 95% 的缺失数据并且结果还不错,因此,如前所述,您可以丢弃一些数据以仅包含 80% 或 90% 的缺失数据,然后应用 NMF对于时间序列。
首先,你的数据为空的原因可能有很多,比如,在以前的项目版本中没有计划获取这些数据,然后你升级它但它不具有追溯力,所以你只能访问来自新版本的数据,这意味着 2% 是很好的数据,但与总容量相比没有任何意义,因为新版本刚刚发布 X 天;等等
无论如何
即使你只有 2% 的非空数据,也没关系,重要的是 "how many data represent those 2%" ?如果是50亿的2%,那么就把"just"非空的那2%作为训练数据,其他的忽略即可!
现在,如果 2% 只代表很少的数据,那么我真的建议你不要用它们填充空值,因为它会产生巨大的偏差,而且,这意味着你的实际流程还没有准备好实施机器学习项目 => 只是适应获取更多数据。
我想在服务器停机时间发生之前预测它。为了实现这个目标,我从不同的数据源收集了很多数据。
其中一个数据源是度量数据,其中包含cpu-时间、cpu-百分比、内存使用等。但是,此数据集中的列的值为空。我的意思是 98% 的许多列都是空的。
在将数据应用于预测算法之前,可以使用什么样的数据准备技术来准备数据。
感谢任何帮助。
通常可以应用各种数据插补技术,但在 98% 为空值的情况下,我认为这不是正确的方法,您将从仅 2% 的可用信息中推断出空数据;这会在您的数据中产生大量偏差。我会选择这样的选项:按降序对行进行排序,这样具有最多非空列的行排在第一位。然后从已排序的行列表的开头确定一个截止点,例如,在选定的数据子集中仅丢失 20% 的数据。然后应用数据插补。但是,当然,这假设您在确定此截止值后将有足够数量的数据点(行),您可能没有并且每一行的数据都不会随机丢失(如果每一行的数据随机丢失,你根本不能使用这种排序方法)。
无论如何,我很难找到一种具体的方法来使用如此大量的缺失数据来构建有意义的模型。
如果我遇到您的情况,我的第一个选择是忽略此数据源。缺失的数据太多,无法成为任何 ML 算法的相关信息来源。
也就是说,如果您仍想使用此数据源,则必须填补空白。仅用 2% 的可用数据推断缺失数据几乎是不可能的,但是当您谈到超过 90% 的缺失数据时,我建议您看看非负矩阵分解 (NMF) here .
此算法的几个版本是 implemeted in R, also to have better results in inferring such a big amount of missing data you could read this paper,它使用时间序列信息(这可能是您的情况)和 NMF 以获得更好的结果。我 运行 一些测试高达 95% 的缺失数据并且结果还不错,因此,如前所述,您可以丢弃一些数据以仅包含 80% 或 90% 的缺失数据,然后应用 NMF对于时间序列。
首先,你的数据为空的原因可能有很多,比如,在以前的项目版本中没有计划获取这些数据,然后你升级它但它不具有追溯力,所以你只能访问来自新版本的数据,这意味着 2% 是很好的数据,但与总容量相比没有任何意义,因为新版本刚刚发布 X 天;等等
无论如何
即使你只有 2% 的非空数据,也没关系,重要的是 "how many data represent those 2%" ?如果是50亿的2%,那么就把"just"非空的那2%作为训练数据,其他的忽略即可!
现在,如果 2% 只代表很少的数据,那么我真的建议你不要用它们填充空值,因为它会产生巨大的偏差,而且,这意味着你的实际流程还没有准备好实施机器学习项目 => 只是适应获取更多数据。