ML.NET Cookbook:(10)如何使用模型做出一个预测?

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ML.NET Cookbook:(10)如何使用模型做出一个预测?相关的知识,希望对你有一定的参考价值。

因为任何ML.NET模型都是一个转换器,所以您当然可以使用model.Transform将该模型应用于“数据视图”并以这种方式获得预测。

不过,更典型的情况是,没有我们想要预测的“数据集”,而是一次只接收一个样本。例如,我们将模型作为ASP.NET网站的一部分运行,并且需要对传入的HTTP请求进行预测。

对于这种情况,ML.NET提供了一个方便的PredictionEngine组件,它基本上是通过预测管道一次运行一个样本。

下面是完整的例子。假设我们为著名的Iris预测数据集建立了一个模型:

// 第一步:将数据加载为IDataView。
 // 检索训练数据。
var trainData = mlContext.Data.LoadFromTextFile<IrisInput>(irisDataPath,
    // 默认分隔符是tab,但数据集使用逗号。
    separatorChar: ','
);

// 创建训练管道。
var pipeline =
    // 将所有特征串联到一列“Features”中。
    mlContext.Transforms.Concatenate("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")
    // 请注意,标签是文本,因此需要将其转换为键。
    .Append(mlContext.Transforms.Categorical.MapValueToKey("Label"), TransformerScope.TrainTest)
    // 在缓存检查点阶段之后的步骤中,将数据缓存在内存中。
    .AppendCacheCheckpoint(mlContext)
    // 使用多类SDCA模型预测标签。
    .Append(mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy())
    // 应用从“PredictedLabel”列到字符串值的逆转换。
    .Append(mlContext.Transforms.Conversion.MapKeyToValue("Data", "PredictedLabel"));

// 训练模型。
var model = pipeline.Fit(trainData);

现在,为了使用模式理解[1]进行预测,我们定义了一对类,如下所示:

private class IrisInput
{
    // 不幸的是,我们仍然需要虚拟的“Label”列。
    [ColumnName("Label")]
    public string IgnoredLabel { get; set; }
    public float SepalLength { get; set; }
    public float SepalWidth { get; set; }
    public float PetalLength { get; set; }
    public float PetalWidth { get; set; }
}

private class IrisPrediction
{
    [ColumnName("Data")]
    public string PredictedClass { get; set; }
}

预测代码如下所示:

// 使用该模型进行一次性预测。
// 使预测函数成为对象。请注意,平均而言,此调用所花费的时间比一个预测长200倍左右,因此您可能希望缓存和重用预测函数,而不是为每个预测创建一个。
var predictionFunc = mlContext.Model.CreatePredictionEngine<IrisInput, IrisPrediction>(model);

// 获得预测。 请记住,“预测”不是可重入的。 如果要使用多个线程进行同时预测,请确保每个线程都使用自己的PredictionEngine。
var prediction = predictionFunc.Predict(new IrisInput
{
    SepalLength = 4.1f,
    SepalWidth = 0.1f,
    PetalLength = 3.2f,
    PetalWidth = 1.4f
});

欢迎关注我的个人公众号”My IO“参考资料

[1]

模式理解: https://github.com/dotnet/machinelearning/blob/main/docs/code/SchemaComprehension.md

以上是关于ML.NET Cookbook:(10)如何使用模型做出一个预测?的主要内容,如果未能解决你的问题,请参考以下文章

ML.NET Cookbook:如何训练回归模型?

ML.NET Cookbook:(17)如何在分类数据上训练模型?

ML.NET Cookbook:(18)如何在文本数据上训练模型?

ML.NET Cookbook:(20)我如何定义自己的数据转换?

ML.NET Cookbook:如何从文本文件加载数据?

ML.NET Cookbook:如何调试实验或预览管道?