在多个组合回归模型中将列指定为特征和标签 (ML.NET)

Specify columns as both feature and label in multiple combined regression models (ML.NET)

我正在使用 ML.NET 通过回归模型预测一系列值。我只对预测的一列(得分列)感兴趣。但是,其他一些列的值不可用于预测 class。我不能将它们保留为 0,因为这会打乱预测,所以我想它们也必须被预测。

我看到一个类似的问题here on predicting multiple values. The 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

这是正确的方法吗,或者其他问题的答案是否达到了预期的结果,即每一列的预测将利用加载数据集中其他预测列的值?

您可以使用的一种技术称为 "Imputation",它将这些未知值替换为某些 "guessed" 值。插补只是替换数据集缺失值的过程。

在 ML.NET 中,您正在寻找的是 ReplaceMissingValues 转换。您可以在 docs.microsoft.com.

上找到 samples

您在上面讨论的技术也是一种插补形式,您的未知数被替换为根据其他已知值预测的值。这也可以。我想我会尝试这两种形式,看看哪种形式最适合您的数据集。