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

7
我想请教一些关于在将数据输入机器学习算法之前如何进行预处理的通用技巧。我正在尝试进一步了解为什么我们在预处理时做出不同的决策,如果有人能够详细介绍清理数据、删除多余数据等需要考虑的所有不同因素,那将对我非常有帮助,因为我已经在网上搜索了很多有关此类问题的规范答案或经验法则,但似乎并没有找到。
我有一个.tsv文件中的数据可供使用,链接在这里。训练集共有7,000行,测试集有3,000行。如果每100行中有无法读取的数据,应该采用哪些不同的策略来处理不良形式的数据?500行?1,000行?任何可以帮助我思考的指导方针都将非常感激。
如果您愿意,可以提供示例代码,但如果不想提供也没有关系,我只是想了解我应该做些什么!:)
谢谢

正如@marek所说,但需要重申的是:机器学习是一种范式,它受益于没有硬性和快速的规则来处理每个数据片段。在您了解如何最好地对其进行消毒和预处理之前,您需要决定要向数据提出什么类型的问题或要调查什么。您需要一个99.9999%准确的解决方案吗?您只是寻找一般趋势吗?误导性数据有多糟糕?这些都是您需要问的问题。并且作为附带评论,无论如何(即在您进行消毒后),始终始终_始终_查看数据。 - dwanderson
1个回答

18

根据实际数据需要做很多决策,它不仅仅是在获取数据时命名一些步骤那么简单。

但是,我可以尝试列举一些通常有帮助的事情。首先并且最重要的是,彻底分析数据并尽力"理解它们"。理解数据和爬取以及收集数据背后的所有背景是必不可少的部分。如果您了解为什么会有缺失数据或噪音,则可以有线索如何处理它。

我将尝试给出一些提示:

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

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


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接