我正在ML.NET中使用TrainTestSplit,将我的数据集重复拆分为训练集和测试集。例如sklearn,相应的函数将种子作为输入,因此可以获取不同的分割,但是在ML.NET中,重复调用TrainTestSplit似乎返回相同的分割。是否可以更改TrainTestSplit使用的随机种子?
答案 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),此问题已解决。 TrainTestSplit
以seed
作为输入,它还通过设置samplingKeyColumnName
支持分层:
TrainTestSplit(IDataView data, double testFraction = 0.1, string samplingKeyColumnName = null, Nullable<int> seed = null);