对于开发人员而言,基于云的机器学习工具带来了使用机器学习来创建和交付新功能的可能性。然而,想要将机器学习整合到他们的应用程序中的开发人员经常会犯一些错误。本文列出十点供读者参考。通过提供发现深埋在数据中的模式的能力,机器学习有可能使应用程序更强大并响应用户需求。调整良好的算法可以从大量不同的数据源中提取价值,而不受人类思维和分析的限制。对于开发人员而言,机器学习有望将关键业务分析应用于从改善客户体验到产品推荐再到超个性化内容服务的任何事物。Amazon和Micorosoft等云供应商提供支持云的机器学习解决方案,承诺为开发人员提供一种将机器学习功能整合到他们的应用程序中的简便方法,最近已成为头条新闻。.承诺看起来很棒,但开发人员需要小心。对于开发人员而言,基于云的机器学习工具带来了使用机器学习创建和交付新功能的可能性。但是,如果使用不当,这些工具可能会输出不好的结果,用户可能会因此而烦恼。任何测试过微软年龄检测机器学习工具的人都会发现,即插即用的易用性带来了主要的准确性问题——关键应用程序或重大决策不应信任它。想要成功地将机器学习融入到他们的应用程序中的开发人员需要了解一些关键点:1.算法使用的数据越多,它就越准确,因此尽可能避免采样。机器学习理论对预测误差有非常直观的描述。简而言之,机器学习模型与其最优预测(理论上最好的可能误差)之间的预测误差差距可以分解为三个部分:Errorduetonotfindthecorrectfunctionalformofthemodelnotfindthebestparameters由于没有使用足够的数据导致的模型错误如果训练集有限,它可能无法支持解决此问题所需的模型复杂性。统计学的基本规律告诉我们,如果可以的话,我们应该使用所有的数据,而不是抽样。2.针对给定的问题选择最好的机器学习算法是成败的关键。例如,梯度提升树(GBT)是一种非常流行的监督学习算法,由于其准确性而被业界开发人员广泛使用。然而,尽管它很受欢迎,但我们不能盲目地将此算法应用于任何问题。相反,我们使用的算法应该是最适合数据特征同时保持准确性的算法。为了证明这一点,尝试做这样一个实验,在流行的文本分类数据集rcv1上测试GBT算法和线性支持向量机(SVM)算法,比较两者的准确率。我们观察到,在这个问题上,线性SVM在错误率方面优于GBT算法。这是因为在文本域中,数据通常是高维的。线性分类器可以在N-1维中完美地分离N个样本,因此单样本模型通常在此类数据上表现更好。此外,模型越简单,以避免过度拟合有限训练样本并提供准确模型的方式学习参数的问题就越少。另一方面,GBT是高度非线性的并且更强大,但在这种环境下更难学习并且更容易过度拟合,通常会导致较低的准确性。3.为了得到更好的模型,必须选择最好的算法和相关参数。这对于非数据科学家来说可能并不容易。现代机器学习算法有许多可以调整的参数。例如,仅流行的GBT算法就有十二个参数可以设置,包括如何控制树的大小、学习率、行或列采样方法、损失函数、正则化选项等等。一个独特的项目需要在给定的数据集上找到每个参数的最优值,并达到最准确的精度,这确实不是一件容易的事。但为了得到最好的结果,数据科学家需要训练大量的模型,直觉和经验会帮助他们根据交叉验证分数决定使用什么参数再次尝试。4.好的数据会使机器学习模型变得更好,错误的数据收集和数据处理会降低您构建预测和归纳机器学习模型的能力。根据经验,建议仔细检查与主题相关的数据,以深入了解数据及其生成背后的过程。通常,此过程会识别与记录、特征、值或样本相关的数据质量问题。5.理解数据特征并改进它们(通过创建新特征或删除特征)对预测能力有很大影响。机器学习的一个基本任务是找到一个丰富的特征空间,可以被机器学习算法充分利用来替代原始数据。例如,特征变换是一种流行的方法,可以在原始数据的基础上使用数学变换来提取新特征。最终的特征空间(即最终用于描述数据的特征)应该能够更好地捕捉数据的多重复杂性(例如非线性和多个特征之间的相互作用),这对于成功的学习过程至关重要。.6.在应用中,选择合适的受商业价值启发的目标函数/损失函数对最终的成功至关重要。几乎所有的机器学习算法最终都被视为优化问题。根据业务性质,合理设置或调整优化后的目标函数是机器学习成功与否的关键。以支持向量机为例,通过假设所有错误类型的权重相等来优化二元分类问题的泛化错误。这不适用于对损失敏感的问题,例如故障检测,其中某些类型的错误可能比其他类型的错误比例更高。在这种情况下,建议通过对特定错误类型添加更多惩罚来调整SVM的损失函数以说明它们的权重。7.确保正确处理训练和测试数据。这允许测试数据在模型部署到生产环境时模拟输入数据。例如,我们可以看到这对于时间相关数据的重要性。在这种情况下,使用标准的交叉验证方法进行训练和调整,测试模型的结果可能会出现偏差甚至不准确。这是因为它无法准确地模拟执行平台上输入数据的性质。为了纠正这个问题,我们必须在部署后部署和使用模型。我们应该使用基于时间的交叉验证来根据最近的数据验证经过训练的模型。8.部署前了解模型的泛化误差。泛化误差衡量模型对未见数据的执行情况。仅仅因为模型在训练数据上表现良好并不意味着它在未见过的数据上也会表现良好。一个设计良好的模拟实际部署使用的模型评估程序是估计模型泛化误差所需要的。如果您不小心,很容易违反交叉验证规则,并且没有明显的方法表明交叉验证不正确,这通常发生在您试图寻找捷径计算时。在部署任何模型之前,都需要仔细关注交叉验证的正确性,以获得对部署性能的科学评估。9.知道如何处理非结构化和半结构化数据。例如文本、时间序列、空间、图形或图像数据。大多数机器学习算法在特征空间中处理数据时,一个特征集代表一个对象,特征集的每个元素描述对象的一个??特征。在实践中,数据在导入时并不是这种格式化形式,往往来自于最原始的格式,最终必须转化为机器学习算法能够识别的理想格式。例如,我们必须知道如何使用各种计算机视觉技术从图像中提取特征,或者如何将自然语言处理技术应用于视频文本。10.学习将业务问题转化为机器学习算法。一些重要的业务问题,如欺诈检测、产品推荐、精准广告投放等,都有“标准”的机器学习表达,并在实践中取得了合理的结果。即使对于这些众所周知的问题,也有鲜为人知但更强大的公式可以带来更高的预测准确性。对于通常在博客和论坛中讨论的小型业务问题,合适的机器学习方法不太明显。如果您是一名开发人员,学习这十个成功的关键似乎是一项艰巨的任务,但不要气馁。事实上,开发人员不是数据科学家。认为开发人员可以利用所有可用的机器学习工具的想法是不公平的。但这并不意味着开发人员没有机会学习一些体面的数据科学来改进他们的应用程序。通过适当的企业解决方案和更高的自动化程度,开发人员可以完成从模型构建到实施部署的所有工作,使用机器学习最佳实践来保持高精度。自动化是跨应用扩展机器学习的关键。即使您负担得起一个由数据科学家和开发人员组成的小团队携手合作,但人才还是不够。像Skytree这样的AutoModel(自动化模型)可以帮助开发者自动确定最佳参数,使算法得到最大的模型精度。易于使用的界面可指导开发人员针对统计错误训练、调整和测试模型。
