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

  

机器学习

 

  基于云的机器学习工具带来了使用机器学习创造和提供新的功能的可能性。然而,当我们使用不当时,这些工具会输出不好的结果。想要在应用程序中成功地融入机器学习的开发者,需要注意十大关键要点。

  在提供发现埋藏数据深层的模式的能力上,机器学习有着潜在的能力使得应用程序更加的强大并且更能响应用户的需求。精心调校好的算法能够从巨大的并且互不相同的数据源中提取价值,同时没有人类思考和分析的限制。对于开发者而言,机器学习为应用业务的关键分析提供了希望,从而实现从改善客户体验到提供产品推荐上升至超个性化内容服务的任何应用程序。

  像Amazon和Micorosoft这样的云供应商提供云功能的机器学习解决方案,承诺为开发者提供一个简单的方法,使得机器学习的能力能够融入到他们的应用程序当中,这也算是最近的头条新闻了。承诺似乎很好,但开发者还需谨慎。

  对于开发人员而言,基于云的机器学习工具带来了使用机器学习创造和提供新的功能的可能性。然而,当我们使用不当时,这些工具会输出不好的结果,用户可能会因此而感到不安。测试过微软年龄检测机器学习工具的人都会发现,伴随即插即用的易用性而来的是主要的精度问题——对于关键应用程序或者是重大决策,它应该不值得信赖。

  想要在应用程序中成功地融入机器学习的开发者,需要注意以下的一些关键要点:

  1. 算法使用的数据越多,它的精度会更加准确,所以如果可能要尽量避免抽样。机器学习理论在预测误差上有着非常直观的描述。简而言之,在机器学习模型和最优预测(在理论上达到最佳可能的误差)之间的预测误差的差距可以被分解为三个部分:

  由于没有找到正确函数形式的模型的误差

  由于没有找到最佳参数的模型的误差

  由于没用使用足够数据的模型的误差

  如果训练集有限,它可能无法支撑解决这个问题所需的模型复杂性。统计学的基本规律告诉我们,如果我们可以的话,应该利用所有的数据而不是抽样。

  2. 对给定的问题选择效果最好的机器学习算法是决定成败的关键。例如,梯度提升树(GBT)是一个非常受欢迎的监督学习算法,由于其精度而被业内开发人员广泛使用。然而,尽管其高度受欢迎,我们也不能盲目的把这种算法应用于任何问题上。相反,我们使用的算法应该是能够最佳地拟合数据特征同时能够保证精度的算法。

  为了证明这个观点,尝试做这样一个实验,在数据集 the popular text categorization dataset rcv1上测试GBT算法和线性支持向量机(SVM)算法,并比较两者的精度。我们观察到在这个问题上,就错误率而言,线性SVM要优于GBT算法。这是因为在文本领域当中,数据通常是高维的。一个线性分类器能够在N-1维当中完美的分离出N个样本,所以,一个样本模型在这种数据上通常表现的更好。此外,模型越简单,通过利用有限的训练样本来避免过拟合的方式学习参数,并且提供一个精确的模型,产生的问题也会随之越少。

  另一方面,GBT是高度非线性的并且更加强大,但是在这种环境中却更难学习并且更容易发生过拟合,往往结果精度也较低。

  3. 为了得到一个更好的模型,必须选择最佳的的算法和相关的参数。这对于非数据科学家而言可能不容易。现代的机器学习算法有许多的参数可以调整。例如,对于流行的GBT算法单独的就有十二个参数可以设置,其中包括如何控制树的大小,学习率,行或列的采样方法,损失函数,正则化选项等等。一个特有的项目需要在给定的数据集上为每一个参数找到其最优值并且达到最精准的精度,这确实不是一件容易的事。但是为了得到最佳的结果,数据科学家需要训练大量的模型,而直觉和经验会帮助他们根据交叉验证的得分,然后决定使用什么参数再次尝试。

  4. 机器学习模型会随着好的数据而变得更好,错误的数据收集和数据处理会降低你建立预测和归纳的机器学习模型的能力。根据经验,建议仔细审查与主题相关的数据,从而深入了解数据和幕后数据的生成过程。通常这个过程可以识别与记录、特征、值或采样相关的数据质量问题。