我对机器学习算法是新手,正在学习回归、分类、聚类、序列建模和在线算法等基础算法。网上的文章大多展示了如何使用这些算法处理特定数据,但没有关于在生产环境中部署这些算法的文章。因此,我的疑问是:
1) 如何在生产环境中部署机器学习算法?
2) 机器学习教程中常见的做法是使用一些训练数据构建模型,然后用它来测试数据。但这种模型是否适合在生产环境中使用?因为传入的数据可能会不断变化,导致模型失效。模型刷新周期的持续时间应为多久,以适应这些变化?
回答:
我不确定这是否是一个好问题(因为它过于宽泛且表述不够好),但我建议你阅读关于偏差-方差权衡的内容。简而言之,你可能有一个低偏差/高方差的机器学习模型,在测试数据(用于实现模型的数据)上获得100%的准确结果,但这可能会导致模型过度拟合训练数据。结果,当你尝试在未用于训练的数据上使用它时,性能会很差。另一方面,你可能有一个高偏差/低方差的模型,它对训练数据的拟合很差,在新的生产数据上的表现也同样糟糕。考虑到这一点,一般的指导原则是:
1) 获得足够多的数据,用于构建机器学习系统的原型
2) 将数据分为训练集、交叉验证集和测试集
3) 创建一个在测试数据上具有相对低偏差(良好的准确性,实际上是良好的F1分数)的模型。然后在交叉验证集上尝试这个模型,看看结果。如果结果不好——你有高方差问题,你使用的模型过度拟合了数据,无法很好地泛化。重新编写你的模型,调整模型参数或使用不同的算法。重复这一过程,直到你在交叉验证集上获得良好结果
4) 由于我们调整了模型以在交叉验证集上获得良好结果,你需要在测试集上测试你的最终模型。如果结果好——那就行了,你已经有了最终版本的模型,可以在生产环境中使用它。
第二个问题没有确定的答案,这取决于你的数据和应用。但可以使用两种一般方法:
1) 按照我之前提到的步骤构建一个在测试集上表现良好的模型。在某个时间段内用新数据重新训练你的模型(尝试不同的时间段,但你可以尝试在看到模型性能下降时重新训练模型)。
2) 使用在线学习方法。这并不适用于许多算法,但在某些情况下可以使用。一般来说,如果你看到可以使用随机梯度下降学习方法——你可以使用在线学习,并保持你的模型与最新的生产数据同步更新。
请记住,即使你使用了第2种方法(在线学习方法),你也不能保证你的模型会永远有效。迟早你获取的数据可能会发生显著变化,你可能需要使用完全不同的模型(例如,从SWM或逻辑回归切换到ANN)。