我们正在评估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”的字段或属性“分数”。
我该怎么做才能获得预测值和分数,欢迎提出建议。
答案 0 :(得分:0)
要更广泛地回答,任何经过ML.NET训练的模型都是ITransformer
。这意味着它可以Transform()
将传入数据集(“示例”)插入输出数据集(“预测”)。
此功能可以称为“批量预测”:一旦有了示例的完整数据集,就可以通过一次调用Transform()
在所有示例上运行模型。
为了便于“以示例为例”的预测,我们添加了PredictionFunction
惯用法。 Here是一个完整的示例。
您可以从预测结果中“请求”任意数量的列:只需将相应的字段添加到“预测”类中,PredictionFunction
将适当地填充它们。