开发者成功使用机器学习的十大诀窍

  5. 理解数据特征并改进它们(通过创造新的特征或者去掉某个特征)对预测能力有着高度的影响。机器学习的一个基本任务就是找到能够被机器学习算法充分利用的丰富特征空间来替代原始数据。例如,特征转换是一种流行的方法,可以通过在原始数据的基础上使用数学上的转换提取新的特征来实现。最后的特征空间(也就是最后用来描述数据的特征)要能更好的捕获数据的多复杂性(如非线性和多种特征之间的相互作用),这对于成功的学习过程至关重要。

  6. 在应用中,选择合适的灵感来自商业价值的目标函数/损失函数对于最后的成功至关重要。几乎所有的机器学习算法最后都被当成是一种优化问题。根据业务的性质,合理设置或调整优化的目标函数,是机器学习成功的关键。

  以支持向量机为例,通过假设所有错误类型的权重相等,对一个二分类问题的泛化误差进行了优化。这对损失敏感的问题并不合适,如故障检测,其中某些类型的错误比重可能比其它类型的要高。在这种情况下,建议通过在特定的错误类型上,增加更多的惩罚来解释它们的权重,从而调整SVM的损失函数。

  7. 确保正确地处理训练数据和测试数据,如此当在生产中部署该模型时,测试数据能够模拟输入数据。例如,我们可以看到,这对于时间依赖性数据是多么的重要。在这种情况下,使用标准的交叉验证方法进行训练,调整,那么测试模型的结果可能会有偏差,甚至会不准确。这是因为在实施平台上它不能准确的模拟输入数据的性质。为了纠正这一点,在部署时我们必须仿照模型来部署使用。我们应该使用一个基于时间的交叉验证,用时间较新的数据来验证训练模型。

  8. 部署前理解模型的泛化误差。泛化误差衡量模型在未知数据上的性能好坏。因为一个模型在训练数据上的性能好并不意味着它在未知的数据上的表现也好。一个精心设计的模拟实际部署使用的模型评估过程,是估计模型泛化误差所需要的。

  一不留心就很容易违反交叉验证的规则,并且也没有一种显而易见的方法来表现交叉验证的非正确性,通常在你试图寻找快捷方式计算时发生。在任何模型部署之前,有必要仔细注意交叉验证的正确性,以获得部署性能的科学评估。

  9. 知道如何处理非结构化和半结构化数据,如文本、时间序列、空间、图形或者图像数据。大多数机器学习算法在处理特征空间中的数据时,一个特征集代表一个对象,特征集的每一个元素都描述对象的一个特点。在实际当中,数据引进时并不是这种格式化的形式,往往来自于最原始的格式,并且最后都必须被改造成机器学习算法能够识别的理想格式。比如,我们必须知道如何使用各种计算机视觉技术从图像中提取特征或者如何将自然语言处理技术应用于影片文本。

  10. 学会将商业问题转换成机器学习算法。一些重要的商业问题,比如欺诈检测、产品推荐、广告精准投放,都有“标准”的机器学习表达形式并且在实践当中取得了合理的成就。即使对于这些众所周知的问题,也还有鲜为人知但功能更强大的表达形式,从而带来更高的预测精度。对于一般在博客和论坛中讨论的小实例的商业问题,适当的机器学习方法则不太明显。

  如果你是一个开发者,学习这十个通往成功的诀窍可能似乎是一个艰难的任务,但是不要气馁。事实上,开发者不是数据科学家。认为开发人员可以充分利用所有的机学习工具是不公平的。但是这并不意味着开发人员没有机会去学习一些有水准的数据科学从而改进他们的应用。随着适当的企业解决方案和自动化程度的提高,开发人员可以做模型构建到实施部署的一切事情,使用机器学习最佳实践来保持高精度。

  自动化是在应用程序中扩展机器学习的关键。即使你能够供得起一批小的数据科学家团队和开发者携手合作,也没有足够的人才。像Skytree的AutoModel(自动化模型)能够帮助开发者自动地确定最佳的参数并且使得算法得到最大的模型精度。一个易于使用的接口可以引导开发人员通过训练加工,调整并且测试模型来防止统计上的错误。

  自动化机器学习过程,有许多方式,包括数据科学家或开发者的人工智能原理,允许算法去思考,学习并且承受更多的建模重任。也就是说,认为数据科学家能够从机器学习中解耦是错误的,特别是在关键任务模型上。谨防这种能够简单使用机器学习功能的承诺,即能够在不需要正确复杂的思考下或者可扩展的应用技术下就使用机器学习——这通常并不会得到高预测精度和机器学习提供的高商业价值结果。更糟糕的是,在应用程序中使用不好的模型实际上可能会适得其反,并迅速在其用户之间建立不信任的产品或服务。