准备用于训练的数据集
您可以通过训练数据集来回答您的机器学习问题。训练数据集包含每个特性的一列以及包含目标的一列。机器学习算法从这些数据行中学习一般模式,以生成可以预测目标的模型。
为了使数据集准备好进行机器学习,您需要了解您的数据并收集必要的数据点。您可能还需要转换一些数据并删除与您的用例无关的数据。
您应该收集哪些数据?
精确定义您的机器学习问题,并准确决定需要聚合哪些内容来解决该问题:
-
如果您想预测哪些客户会流失,您需要聚合一个数据集,其中每一行代表一个客户,每个特性列代表描述该客户的一个特性,而目标列是该客户在特定时间段内是否流失。
-
如果您想预测特定月份和地区的销售额,您需要聚合一个数据集,其中每一行代表特定地区的特定月份,每个特性列代表描述该地区该月业务的一个特性,而目标列是该地区该月的销售收入。
尝试找出哪些因素可能会影响目标,并查看是否可以收集到这些数据。请记住,预测算法只能识别可以被发现的模式。也许您需要收集或创建额外的特性来提取更多信息?
您还必须确定在能够准确预测之前需要积累多少数据。事件需要多长时间才能具有代表性?请考虑以下示例:
-
客户需要成为会员 60 天,然后您才能预测他们是否会在第 90 天离开。
-
保险索赔的成本在几个月内是未知的,因此您可以排除不到六个月的索赔。
区分时变数据和非时变数据。对于时变数据,数据是否带有时间戳以便适当地进行聚合?
预测时数据是否可用?
确保您包含在训练数据集中的所有特性也可用于未来的预测。一个常见的错误是使用历史数据中可用的特性来训练模型,但在未来进行预测时这些特性将不可用。在对新数据进行预测时,机器学习算法必须具有训练数据集中所有可用特性的值。
数据越多越好吗?
样本大小
更大量的数据往往会产生更可靠的模型。任何额外的相关数据点都会有所帮助,无论这些是新的还是历史的观察结果。
特性数量
无论与目标结果的相关性如何,将所有可能的变量包含在模型中可能很诱人。通常越简单越好。在模型中使用较少数量的特性通常更好。
当特性较多时,可能会有更大的风险掩盖您想要揭示的真正潜在关系。预测模型可以使用所有特性得出一系列复杂的规则,这些规则在用于训练模型的数据上表现良好。但预测目标实际上可能只受一两个特性的影响。该模型可能不擅长泛化到训练中使用的数据之外的数据,这将导致在应用于新数据时预测性能不佳。
过度拟合
过度拟合意味着模型过于复杂,因此在预测新数据时不可靠。当相对于可用数据点的数量有太多特性时,往往会发生过度拟合。例如,您可能在数据集中只有 50 行数据和 100 个特性列。
您的训练数据相关吗?
机器学习算法在您提供的数据中寻找模式,并使用这些模式对未来的数据进行预测。当您对新数据进行预测时,您假设它与训练数据相似。因此,训练数据集在统计上类似于您将要进行预测的数据非常重要。
如果市场或业务与您的训练数据集描述的情况相比发生了重大变化,您可能正在使用过时的数据集,这将导致预测不准确。您可能需要创建一个新的训练数据集,并且仅使用在变化发生后收集的数据。
考虑 了解机器学习 中关于销售预测的示例。假设我们将代表电视、广播和报纸广告支出以及历史业务季度销售收入的数据输入到我们的算法中。然而,这些数据是在 20 世纪 80 年代收集的。现在我们不再在广播上为该产品做广告,我们几乎完全在网上为该产品做广告。我们训练有素的算法在预测当前业务季度的销售额时表现不佳,因为训练数据不能代表当前的业务。
探索数据
利用您的业务知识来理解和验证数据。如果数据与您的假设不符,这可能意味着数据存在问题,还是意味着您的假设有误?
删除不可靠的特性
考虑从数据集中排除以下列:
-
某个值高度集中(低基数)。例如,包含值“red”、“green”、“blue”的列,其中 90% 的值是“red”。
-
值高度唯一(高基数)。
-
大多数值为空。
处理相关特性
删除冗余特性,例如提供相同或非常相似信息的高度相关特性。考虑从似乎捕获数据中相同行为的组中选择单个特性。尝试确定是否有一个特性在驱动另一个特性。
替换空值
探索您的数据,找出关键数据点(如目标或关键特性)中是否存在缺失值。要使用稀疏列中的值,您可以将空值替换为“other”或“unknown”。或者也许您需要重新评估数据收集。
目标范围
查看数据的分布。如果目标数据的分布相对于样本大小过于分散,可能很难在数据中找到任何模式。
数据值的范围是多少?预测范围外的数据值存在一些挑战。在 外插及内插 中阅读更多内容。
分布中是否存在异常?数据中的偏斜、尾部和多峰形状可能需要额外的数据转换或进一步的特性工程。尝试对低容量类别进行分组,并对数字特性中的尾部进行舍入或删除。
消除异常值
考虑删除特性列中具有异常值的观察结果。异常值可能会阻碍算法识别数据中一般模式的能力。查看目标列中分布更紧密的较小数据子集可能会更好。
数据分组
您可以通过将数据拆分为不同的数据集并使用它们来训练单独的模型来改善结果。基于一个或多个特性进行数据分组。
数据泄漏
数据泄漏意味着用于训练机器学习算法的数据包含您试图预测的信息。