【问题标题】:Specify columns as both feature and label in multiple combined regression models (ML.NET)在多个组合回归模型 (ML.NET) 中将列指定为特征和标签
【发布时间】:2020-02-10 13:05:58
【问题描述】:

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

我看到了一个关于预测多个值的类似问题hereanswer 建议创建两个模型,但我可以看到每个模型中指定的特征列不包括另一个模型的标签列。因此,这意味着在进行预测时不会使用这些列。我错了,还是每个模型的标签列也应该包含在另一个模型的特征列中?

这里有一些示例代码可以尝试在代码中解释:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答(对于延迟回复表示歉意)。 ReplaceMissingValues 似乎只插入默认值、最小值、最大值或平均值,而不是尝试预测它们。我编码的插补技术是否不会使用 ML 更预测地插入缺失值?此外,我尝试将类似的技术应用于时间序列模型,但遇到了问题。或许你可以看到 my other question 关于这个。
    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 2017-09-24
    • 2016-07-25
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2017-11-15
    • 2019-08-08
    相关资源
    最近更新 更多