在 ML 中修复以执行受控实验的随机参数

数据挖掘 机器学习 scikit-学习 数据 数据科学模型 麻木的
2022-03-11 14:14:11

现代机器学习技术中的许多算法和方法都包含随机性,因此,多次运行相同的 ML 脚本可能会导致不同的输出,从而导致准确性结果。例如,运行随机森林可以产生 0.78 的准确度,然后在数据、设置、代码没有变化的情况下再次运行时,可以得到 0.79。当我测试输入的一些变化及其对输出的影响时,这带来了无法执行受控实验的挑战。

因此,为了能够执行完美控制的实验以实现最佳模型输出,我应该修复哪些广泛的随机参数集?我希望整个过程是完全确定的。

PS:我正在使用 Sci-kit Learn 环境和其他算法,例如 XGBoost、CatBoost、LightGBM。

我假设有一些参数 random_state(s) 我也应该在 NumPy 中修复。

1个回答

Scikit 使用 numpy 生成伪随机数。因此,要修复各种 scikit 调用中的随机状态,请使用numpy.random.seed(12345)然后使用 scikit。您可能希望在记录模型时记录随机种子,以便稍后重现相同的运行。

如果您的代码(或您调用的代码)也使用 Python 的随机数生成器,您也可以设置random.seed

如何设置种子取决于库。例如,我相信大多数xgboostAPI 都会公开一个seed参数。不确定catboost。

您还依赖于库,甚至公开了一种方法来播种它所做的任何伪随机选择。有可能一些图书馆并不完全这样做。(或者在 Spark 的情况下,有时结果甚至可以想象取决于分布式执行的顺序,这很难控制。)