ML.NET TrainTestSplit 随机种子

ML.NET TrainTestSplit random seed

我在 ML.NET 中使用 TrainTestSplit,将我的数据集重复拆分为训练集和测试集。例如sklearn,相应的函数以一个seed作为输入,这样就可以获得不同的splits,但是在ML.NET重复调用TrainTestSplit似乎return相同的splits。是否可以更改 TrainTestSplit 使用的随机种子?

目前TrainTestSplit不采用随机种子。在 ML.NET 中打开了一个错误来解决这个问题:https://github.com/dotnet/machinelearning/issues/1635

作为短期解决方法,我建议手动向数据视图添加一个随机列,并将其用作 TrainTestSplit 中的 stratificationColumn:

data = new GenerateNumberTransform(mlContext,  new GenerateNumberTransform.Arguments
                {
                    Column = new[] { new GenerateNumberTransform.Column { Name = "random" } },
                    Seed = 42 // change seed to get a different split
                }, data);
(var train, var test) = mlContext.Regression.TrainTestSplit(data, stratificationColumn: "random");

此代码适用于 ML.NET 0.7,我们将在 0.8 中修复种子。

截至今天 (ML.NET v1.0),此问题已解决。 TrainTestSplit 以一个seed作为输入,它也支持通过设置samplingKeyColumnName:

来分层
TrainTestSplit(IDataView data, double testFraction = 0.1, string samplingKeyColumnName = null, Nullable<int> seed = null);