【发布时间】:2020-02-10 13:05:58
【问题描述】:
我正在使用 ML.NET 使用回归模型预测一系列值。我只对预测的一列(分数列)感兴趣。但是,其他一些列的值不可用于预测类。我不能将它们保留为 0,因为这会扰乱预测,所以我想它们也必须被预测。
我看到了一个关于预测多个值的类似问题here。 answer 建议创建两个模型,但我可以看到每个模型中指定的特征列不包括另一个模型的标签列。因此,这意味着在进行预测时不会使用这些列。我错了,还是每个模型的标签列也应该包含在另一个模型的特征列中?
这里有一些示例代码可以尝试在代码中解释:
public class FooInput
{
public float Feature1 { get; set; }
public float Feature2 { get; set; }
public float Bar {get; set; }
public float Baz {get; set; }
}
public class FooPrediction : FooInput
{
public float BarPrediction { get; set; }
public float BazPrediction { get; set; }
}
public ITransformer Train(IEnumerable<FooInput> data)
{
var mlContext = new MLContext(0);
var trainTestData = mlContext.Data.TrainTestSplit(mlContext.Data.LoadFromEnumerable(data));
var pipelineBar = mlContext.Transforms.CopyColumns("Label", "Bar")
.Append(mlContext.Transforms.CopyColumns("Score", "BarPrediction"))
.Append(mlContext.Transforms.Concatenate("Features", "Feature1", "Feature2", "Baz"))
.Append(mlContext.Regression.Trainers.FastTree());
var pipelineBaz = mlContext.Transforms.CopyColumns("Label", "Baz")
.Append(mlContext.Transforms.CopyColumns("Score", "BazPrediction"))
.Append(mlContext.Transforms.Concatenate("Features", "Feature1", "Feature2", "Bar"))
.Append(mlContext.Regression.Trainers.FastTree());
return pipelineBar.Append(pipelineBaz).Fit(trainTestData.TestSet);
}
这实际上与上述答案相同,但添加了 Baz 作为要预测 Bar 的模型的特征,相反,添加了 Bar 作为模型的特征其中Baz 将被预测。
这是正确的方法吗,或者另一个问题的答案是否达到了预期的结果,即每一列的预测将利用加载数据集中另一个预测列的值?
【问题讨论】:
标签: c# machine-learning ml.net