在Microsoft ML中,如何配置分数并预测标签输出

时间:2018-10-25 15:20:46

标签: c# ml.net

我们正在评估ML.Net 0.6版,我对错误消息感到沮丧... 我的问题,也许有人知道我做错了。

我有一个为ML.Net创建的类,它具有功能和标签。 在学习管道中,我添加了

var pipeline = new LearningPipeline() {
    new TextLoader(_trainingFile.FullName).CreateFrom<MyClass>(useHeader: true, separator: separator),
    new ColumnCopier(("Trend", "Label")),
    new Dictionarizer("Label"),
    new CategoricalOneHotVectorizer("Trend"),
    new ColumnConcatenator("Features,"col1","col2",... "Trend"),
    new StochasticDualCoordinateAscentClassifier()
    {
        Shuffle = false,
    },
    new PredictedLabelColumnOriginalValueConverter()
    {
            PredictedLabelColumn="PredictedLabel"
    }
};

我的Predict类如下:

class MyPrediction
{
    [ColumnName("PredictedLabel")]
    public string PredictedLabels;

    [ColumnName("Score")]
    public float Scores;
}

“趋势”列是带有Enum标签的字符串。我进行了训练,并且效果很好,并非总是能预测正确,但是当我添加分数列时,我得到了一个错误。

无法将类型为“ Vec”的IDataView列“分数”绑定到类型为“ System.Single”的字段或属性“分数”。

我该怎么做才能获得预测值和分数,欢迎提出建议。

1 个答案:

答案 0 :(得分:0)

要更广泛地回答,任何经过ML.NET训练的模型都是ITransformer。这意味着它可以Transform()将传入数据集(“示例”)插入输出数据集(“预测”)。

此功能可以称为“批量预测”:一旦有了示例的完整数据集,就可以通过一次调用Transform()在所有示例上运行模型。

为了便于“以示例为例”的预测,我们添加了PredictionFunction惯用法。 Here是一个完整的示例。

您可以从预测结果中“请求”任意数量的列:只需将相应的字段添加到“预测”类中,PredictionFunction将适当地填充它们。