迭代式地找到一个好的机器学习模型

一条鱼 2018-03-26

没有一种机器学习方法在所有问题中表现最好。那么我们如何找到符合我们需求的最佳产品?这篇文章建议,在进入复杂的方法并花时间调整深度学习模型之前,尝试一下简单的方法。随着您逐渐采用更复杂的方法,您可能会发现简单的方法足以满足您的需求。

不要坚持单一方法

你无论多么复杂或简单的方法,它都不会最好地解决所有问题。对于你作为数据科学家来说,这意味着如果你想要一个好的模型,你需要探索不同的方法。对不起,深度学习可能无法为您正在处理的这个问题提供最好的...

假设的一个例子:如果两个实例在特征空间中靠近,它们必须是相似的(即光滑度)。另一种可以是线性方法假定数据是线性可分的(例如逻辑回归,线性SVM)。除此之外,方法的假设及其对它们的鲁棒性各不相同。例如,最近邻分类器对平滑度做出了很强的假设。这意味着如果您有一个非常好的距离度量标准,您可以使用它获得很好的结果。

迭代式地找到一个好的机器学习模型

左:线性可分的数据。右:线性不可分的数据。

线性模型可以在左侧的数据上完美地分类,但是它不能在右侧的数

鉴于所有这些,探索不同方法而不是坚持一个方法是一个好主意。

开始简单

敏捷方法论表明我们应该重复开发。这意味着我们不应该在第一次尝试时尝试解决所有问题。对于数据科学而言,这意味着我们从一个简单的方法开始,并随着我们的进展而加速。第一次迭代应该有每一步的简单版本(例如处理,特征提取),因此它应该有一个简单的方法。

在第一次迭代中,最好选择一个简单的方法。一个简单的方法,易于实现,理解和调试。此外,它不应该需要密集计算或昂贵的超参数搜索。当你使用一个简单的方法时,更容易发现错误,错误并修复它们。一个简单的模型可能表现不佳,但你会很快得到这个模型。

一个简单方法的实例可以是最近邻居。它需要几行代码来实现,它的方法非常简单*。你甚至可以考虑不使用机器学习方法。有时我会在第一次迭代中使用随机预测器或非常简单的if子句。这些简单的方法为您的问题提出了基准。虽然我称之为简单,但没有理由说明为什么简单的方法不能比复杂的方法更好。有时简单的方法可以产生有趣或好的表现。

迭代式地找到一个好的机器学习模型

最近邻居产生最接近的训练实例的标签作为预测

改进

第一次迭代后,您将获得一个模型和一个基准性能。现在你可以继续迭代。在每次迭代中,你都会加速并尝试一种不同的方法。当你迭代时,我建议你一次一小步。在每次迭代中,你都会改进一件事情。这将允许您比较您的更改如何影响性能,并随时监控您的改进。用这种方法也容易找到是否存在有问题的操作,因为在这种情况下你的表现会下降。

绩效与期望

你总是得到更好的表现。但是,也许你已经拥有的足够了。当你继续处理你的问题时,获得改进就会变得更加困难。小的改进开始花费更长的时间并且变得更加昂贵。例如,如果您对问题的准确性达到99%,也许您不应该花费更多时间和资源将其推到99.2%。根据你的问题和期望,你可能已经达到了你的模型足够好的程度。

例如,如果您使用MNIST数据集调查数字识别,则可以发现没有进行任何预处理的K近邻的误差率达到〜3%。这意味着使用简单的模型,您可以正确识别100个数字中的97个数字。如果您的表现足够好,您可能会停止尝试获得更好的模型并部署解决方案。最后,您花费很少的时间部署解决方案,而不会浪费您的资源在复杂的方法上。这种方法通过迭代开发更容易执行,而不是从一个复杂的方法开始并坚持下去。

迭代式地找到一个好的机器学习模型

MNIST数据集上不同方法的不完整性能列表

可以说最近邻居在计算上昂贵,因为它计算测试实例和训练数据集之间的距离矩阵。

相关推荐