如何预处理机器学习数据?

时间:2014-01-26 22:25:40

标签: python machine-learning artificial-intelligence preprocessor scikit-learn

我只是想了解一些关于如何在将数据输入机器学习算法之前对其进行预处理的一般提示。我正在努力进一步理解为什么我们在预处理时做出不同的决定,如果有人可以通过我们在清理数据时需要考虑的所有不同的事情,删除多余的数据等等。我会发现它非常有用。我在网上搜索了一些规范的答案或经验法则,但似乎没有。

我在.tsv文件中有一组数据here。训练集总计7,000行,测试集为3,000行。如果100行不可读,我应该使用哪些不同的策略来处理格式错误的数据? 500? 1000?任何帮助我理解这一点的指导都将非常感激。

示例代码很棒,但如果您不喜欢它,则没有必要,我只是想了解我应该做什么! :)

由于

1 个答案:

答案 0 :(得分:18)

有很多事情需要根据实际数据来决定。它并不像在获取数据时总是命名几个步骤那么简单。

但是,我可以尝试列举一些通常有用的东西。不过,第一个也是最重要的是彻底分析数据并尽力“理解它们”。了解数据以及抓取和收集数据背后的所有背景是必不可少的部分。如果您了解数据或噪音的缺失,那么您可以知道如何处理它。

我会尝试给你一些提示,但是:

  1. 规范化值 - 并非总是需要规范化所有要素。但一般来说,正常化不会伤害它,它可以帮助很多。因此,如果您不受限制,请尝试使用标准化除了那些明显无意义的标准化之外的所有功能。最常用的归一化方法是:线性归一化(将特征值映射到< 0,1>范围)和 z-normalization 这意味着你减去平均值特征值并将结果除以标准偏差。通常不可能说哪一个更好。 (我们回到理解数据)
  2. 缺少值 - 有必要决定如何处理缺失值。有几种方法可以处理它。 删除带有缺失值的示例。如果您有足够的数据样本,可能没有必要关心缺少值的样本。它可能只会给您的结果带来噪音。在这种情况下,样本中只缺少一个特征值,您只需通过特征平均值填充该值即可。 (但要小心,因为再次,你可以把噪音带到结果)
  3. 异常值 - 在许多情况下,您会遇到远离其他样本的样本,即异常值。异常值通常只是噪声,数据中的错误或者它可能是特殊行为的信号(例如,当存在某些违反通常行为模式的情况时,它可能是由攻击者或某事引起的行为的信号 - 例如银行网络)。在大多数情况下,最好只是删除异常值,因为异常值的数量通常很低,并且可能会对结果产生很大影响。 考虑直方图作为一个例子 - 我只会切断0-2.5百分位和97.5-100百分位
  4. 错误 - 数据很可能会出错。这是我无法给你任何提示的部分,因为有必要真正理解所有背景并知道如何发生错误。
  5. 标称值 - 如果有任何可以订购的标称值,则只需标称值替换为数字(0,1,2,3,4,和5)。如果无法对值进行排序(例如,颜色=蓝色,黑色,绿色......),那么最好的方法是将要素拆分为与可能集合的基数一样多的要素值。只需将功能转换为二进制值 - “绿色?” “是/否”(0/1)。
  6. 总结,一般来说真的很难回答。如何避免“使事情变得更糟”的好方法是从删除所有“坏的价值”开始。只需删除缺少值或错误值的所有行。如前所述转换所有其他值并尝试获取您的第一个结果。然后,您将更好地了解所有数据,并且您将更好地了解在哪里寻找任何改进。

    如果您对特定的“预处理问题”有任何疑问,我将很乐意编辑此答案,并添加更多如何处理它的想法。