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

Sim*_*ely 7 python preprocessor artificial-intelligence machine-learning scikit-learn

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

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

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

谢谢

Mar*_*rek 18

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

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

不过,我会尝试给你一些提示:

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

总结,一般来说真的很难回答.如何避免"使事情变得更糟"的好方法是从删除所有"坏的价值"开始.只需删除缺少值或错误值的所有行.如前所述转换所有其他值并尝试获取您的第一个结果.然后,您将更好地了解所有数据,您将更好地了解在哪里寻找任何改进.

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