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);
我在 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);