我想在服务器停机之前预测服务器停机的时间。为了实现这一目标,我从不同的数据源收集了许多数据。
数据源之一是包含cpu-time,cpu-percentage,内存使用率等的度量数据。但是,此数据集中列的值为空。我的意思是许多列中有98%为空。
在将数据应用于预测算法之前,可以使用哪种数据预处理技术对其进行预处理。
感谢您的帮助。
答案 0 :(得分:1)
通常可以使用各种数据插补技术,但是对于98%的空值,我认为这不是正确的方法,您将仅从2%的可用信息中推断出空数据;这会在您的数据中产生大量偏差。我会选择这样的方法:对您的行进行降序排序,以使非空列数最多的行排在第一位。然后从已排序的行列表的开头确定一个截止值,例如,仅在所选数据子集中丢失20%的数据。然后应用数据插补。但是,当然,这是假设您在确定此临界值之后将拥有足够数量的数据点(行),您可能没有,并且每一行的数据也不会有随机丢失(如果每一行的数据均随机丢失,您根本不能使用这种排序方法。
无论如何,我几乎看不到通过使用大量丢失的数据来构建有意义的模型的具体方法。
答案 1 :(得分:1)
如果您遇到的情况,我的第一个选择是忽略此数据源。对于任何ML算法而言,缺少的数据太多,都无法成为相关的信息源。
话虽如此,如果您仍然想使用此数据源,则必须填补空白。仅用2%的可用数据来推断丢失的数据几乎是不可能的,但是当您谈论90%以上的丢失数据时,我建议您看一下非负矩阵分解(NMF)here
此算法的一些版本为implemeted in R,也可以更好地推断出如此大量的丢失数据,您可以阅读this paper,其中使用了时间序列信息-这可能是您的情况-使用NMF可获得更好的效果。我对多达95%的丢失数据进行了一些测试,结果还不错,因此,如前所述,您可以丢弃某些数据以仅丢失80%或90%的数据,然后对时间序列应用NMF。
答案 2 :(得分:0)
首先,您的数据为空的原因可能有很多,例如,原计划不从以前的项目版本中获取这些数据,然后再进行升级,但没有追溯性,因此您只能从以下位置访问数据:新版本,意味着2%的数据不错,但与总交易量相比却毫无用处,因为新版本自X天以来就处于上升状态;等
反正
即使您仅拥有2%的非空数据,也并不重要,重要的是“有多少数据代表了那2%”?如果它是50亿中的2%,则足以“仅”将非null的2%作为训练数据而忽略其他数据!
现在,如果2%仅代表很少的数据,那么我真的建议您不要用它们填充空值,因为这会产生巨大的偏差,此外,这意味着您的实际流程尚未准备好实施机器学习项目=>仅需适应即可获取更多数据。