ML.NET TrainTestSplit随机种子

时间:2018-11-15 13:37:42

标签: c# train-test-split ml.net

我正在ML.NET中使用TrainTestSplit,将我的数据集重复拆分为训练集和测试集。例如sklearn,相应的函数将种子作为输入,因此可以获取不同的分割,但是在ML.NET中,重复调用TrainTestSplit似乎返回相同的分割。是否可以更改TrainTestSplit使用的随机种子?

2 个答案:

答案 0 :(得分:2)

现在TrainTestSplit并没有随机种子。 ML.NET中打开了一个错误来解决此问题:https://github.com/dotnet/machinelearning/issues/1635

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

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。

答案 1 :(得分:0)

从今天开始(ML.NET v1.0),此问题已解决。 TrainTestSplitseed作为输入,它还通过设置samplingKeyColumnName支持分层:

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