ML.NET Cookbook:(10)如何使用模型做出一个预测?
因?yàn)槿魏蜯L.NET模型都是一個(gè)轉(zhuǎn)換器,所以您當(dāng)然可以使用model.Transform將該模型應(yīng)用于“數(shù)據(jù)視圖”并以這種方式獲得預(yù)測(cè)。
不過(guò),更典型的情況是,沒(méi)有我們想要預(yù)測(cè)的“數(shù)據(jù)集”,而是一次只接收一個(gè)樣本。例如,我們將模型作為ASP.NET網(wǎng)站的一部分運(yùn)行,并且需要對(duì)傳入的HTTP請(qǐng)求進(jìn)行預(yù)測(cè)。
對(duì)于這種情況,ML.NET提供了一個(gè)方便的PredictionEngine組件,它基本上是通過(guò)預(yù)測(cè)管道一次運(yùn)行一個(gè)樣本。
下面是完整的例子。假設(shè)我們?yōu)橹腎ris預(yù)測(cè)數(shù)據(jù)集建立了一個(gè)模型:
//?第一步:將數(shù)據(jù)加載為IDataView。//?檢索訓(xùn)練數(shù)據(jù)。 var?trainData?=?mlContext.Data.LoadFromTextFile<IrisInput>(irisDataPath,//?默認(rèn)分隔符是tab,但數(shù)據(jù)集使用逗號(hào)。separatorChar:?',' );//?創(chuàng)建訓(xùn)練管道。 var?pipeline?=//?將所有特征串聯(lián)到一列“Features”中。mlContext.Transforms.Concatenate("Features",?"SepalLength",?"SepalWidth",?"PetalLength",?"PetalWidth")//?請(qǐng)注意,標(biāo)簽是文本,因此需要將其轉(zhuǎn)換為鍵。.Append(mlContext.Transforms.Categorical.MapValueToKey("Label"),?TransformerScope.TrainTest)//?在緩存檢查點(diǎn)階段之后的步驟中,將數(shù)據(jù)緩存在內(nèi)存中。.AppendCacheCheckpoint(mlContext)//?使用多類SDCA模型預(yù)測(cè)標(biāo)簽。.Append(mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy())//?應(yīng)用從“PredictedLabel”列到字符串值的逆轉(zhuǎn)換。.Append(mlContext.Transforms.Conversion.MapKeyToValue("Data",?"PredictedLabel"));//?訓(xùn)練模型。 var?model?=?pipeline.Fit(trainData);現(xiàn)在,為了使用模式理解[1]進(jìn)行預(yù)測(cè),我們定義了一對(duì)類,如下所示:
private?class?IrisInput {//?不幸的是,我們?nèi)匀恍枰摂M的“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;?} }預(yù)測(cè)代碼如下所示:
//?使用該模型進(jìn)行一次性預(yù)測(cè)。 //?使預(yù)測(cè)函數(shù)成為對(duì)象。請(qǐng)注意,平均而言,此調(diào)用所花費(fèi)的時(shí)間比一個(gè)預(yù)測(cè)長(zhǎng)200倍左右,因此您可能希望緩存和重用預(yù)測(cè)函數(shù),而不是為每個(gè)預(yù)測(cè)創(chuàng)建一個(gè)。 var?predictionFunc?=?mlContext.Model.CreatePredictionEngine<IrisInput,?IrisPrediction>(model);//?獲得預(yù)測(cè)。?請(qǐng)記住,“預(yù)測(cè)”不是可重入的。?如果要使用多個(gè)線程進(jìn)行同時(shí)預(yù)測(cè),請(qǐng)確保每個(gè)線程都使用自己的PredictionEngine。 var?prediction?=?predictionFunc.Predict(new?IrisInput {SepalLength?=?4.1f,SepalWidth?=?0.1f,PetalLength?=?3.2f,PetalWidth?=?1.4f });歡迎關(guān)注我的個(gè)人公眾號(hào)”My IO“參考資料
[1]
模式理解: https://github.com/dotnet/machinelearning/blob/main/docs/code/SchemaComprehension.md
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的ML.NET Cookbook:(10)如何使用模型做出一个预测?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Api网关Kong集成Consul做服务
- 下一篇: ASP.NET Core文件上传IFor