日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ML.NET机器学习、API容器化与Azure DevOps实践(二):案例

發布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ML.NET机器学习、API容器化与Azure DevOps实践(二):案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上文中,我簡單地介紹了機器學習以及ML.NET的相關知識,從本講開始,我會基于一個簡單的案例:學生成績預測,來介紹使用ML.NET進行機器學習以及API部署的基本過程。

本案例的數據來源為加州大學爾灣分校的機器學習公開樣本數據集,數據介紹頁面和下載地址為:https://archive.ics.uci.edu/ml/datasets/Student+Performance。該數據集包含了來自兩所學校的學生的問卷調查結果,以及每位學生的綜合成績。數據集為CSV格式,每個字段的含義在官網上都有詳細介紹,因此,在這里就不再贅述了。

確定問題類型

我們的任務很簡單,就是基于這套已有的學生問卷調查結果以及綜合成績,進行機器學習模型訓練,然后,再根據一套給定的學生情況信息,來預測該名學生的綜合成績。不難發現,我們需要使用監督學習中的回歸算法來進行模型訓練,因為我們需要得到一個連續的預測值,而不是離散的二元或者多元值。在確定了我們的任務之后,就可以對得到的數據集進行一些預處理,以便機器學習的過程能夠順利進行。

數據預處理與數據分析

在得到訓練數據集之后,通常不能直接拿來進行機器學習,需要對數據進行一些處理。數據預處理任務大致有:

  • 數據格式規整化:對每一列的數據進行類型和單位統一,比如,“濃度”字段有些行使用的是ug/mL,有些行使用的是g/L,需要對單位進行統一,并將“濃度”字段的值轉換為數值類型,以便進行統計

  • 特殊值處理:有些樣本數據的取值比較異常,超出正常范圍很多,對于這樣的數據,可以直接丟棄,也可以通過一些統計學算法對其進行修正

  • 空值、無效值處理:有些樣本數據的取值為空(或者對于數值型的數據,取值為0,并且不合理),對于這樣的數據,也需要進行修正或者舍棄

  • 數據一致性校驗:對數據一致性進行校驗

  • 識別特征屬性與目標屬性:分析訓練數據中,哪些屬性會對預測目標造成影響,哪些屬性不會影響預測結果

例如,基于本案例中的學生問卷調查結果,我們可以看到,有些學生的綜合成績為0,在本案例中,我們可以選擇舍棄這些數據:

再比如,通過下面的熱圖我們可以了解到,平時學習時間相對較長,外出時間較短,并且有意向繼續深造的學生,綜合成績也會相對越好。因此,學習時間、外出時間以及是否有意向繼續深造,都有可能是影響綜合成績的因素。在進行模型訓練時,就有可能需要將這些因素考慮進去。

在實際應用中,數據對于機器學習而言尤為重要,數據清洗的任務相當繁重。據我所知,某國際知名制藥公司正在將人工智能應用在新藥研發中,但由于數據清洗任務巨大,根本沒有足夠的標準化、規整化數據來支持各種機器學習任務,因此,在新藥研發領域,人工智能的應用進展緩慢。

回到我們的案例,在完成了數據清洗任務和特征屬性、目標屬性的識別之后,就可以使用ML.NET進行編程,實現學生學習成績的預測。

注:本案例代碼已開源。地址是:https://github.com/daxnet/mlnet-trainer。

通過上面的分析不難得出,我們的應用場景屬于監督學習中的回歸(Regression)預測,因此,我們可以選擇使用ML.NET中所提供的回歸算法,使用樣本數據逐一完成模型訓練,然后,使用測試數據對每個模型的預測結果進行評估,以選擇合適的預測算法。為了對所有ML.NET默認支持的回歸算法進行預測評估,在程序中使用如下數據結構來保存這些算法的實例,以便之后進行模型訓練的時候,可以逐一對這些算法進行訓練和評估:


var trainers = new List<ITrainerEstimator<ISingleFeaturePredictionTransformer<ModelParametersBase<float>>, ModelParametersBase<float>>>()

{

????mlContext.Regression.Trainers.FastTree(),

????mlContext.Regression.Trainers.FastForest(),

????mlContext.Regression.Trainers.FastTreeTweedie(),

????mlContext.Regression.Trainers.GeneralizedAdditiveModels(),

????mlContext.Regression.Trainers.OnlineGradientDescent(),

????mlContext.Regression.Trainers.PoissonRegression(),

????mlContext.Regression.Trainers.StochasticDualCoordinateAscent()

};

首先,我們將原始樣本數據分成兩份,一份用來訓練,另一份用來測試,將兩份數據讀入ML.NET的DataView,使用訓練數據集進行模型訓練,并使用測試數據集對模型進行評估,代碼如下:


public IEnumerable<KeyValuePair<string, RegressionMetrics>> TrainAndEvaluate(IDataView trainingDataView, IDataView testDataView)

{

????var metrics = new Dictionary<string, RegressionMetrics>();

????foreach(var trainer in this.trainers)

????{

????????var pipeline = mlContext.Transforms.CopyColumns(inputColumnName: "G3", outputColumnName: "Label")

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("School"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Sex"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Age"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Famsize"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Guardian"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Traveltime"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Studytime"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Failures"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Paid"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Higher"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Famrel"))

????????????.Append(mlContext.Transforms.Categorical.OneHotEncoding("Absences"))

????????????.Append(mlContext.Transforms.Concatenate("Features",

????????????????"School",

????????????????"Sex",

????????????????"Age",

????????????????"Famsize",

????????????????"Guardian",

????????????????"Traveltime",

????????????????"Studytime",

????????????????"Failures",

????????????????"Paid",

????????????????"Higher",

????????????????"Famrel",

????????????????"Absences"))

????????????.AppendCacheCheckpoint(mlContext)

????????????.Append(trainer);

????????var trainedModel = pipeline.Fit(trainingDataView);

????????trainedModels.Add(trainer.GetType().Name, trainedModel);

????????var predictionModel = trainedModel.Transform(testDataView);

????????var regMetrics = mlContext.Regression.Evaluate(predictionModel);

????????metrics.Add(trainer.GetType().Name, regMetrics);

????}

????return metrics;

}

上面代碼中所出現的列名(比如School、Sex、Age等)均來自于學生問卷調查原始數據,此處并沒有包含原始數據中的所有字段,因為僅有上述這些字段會對綜合成績產生影響,所以并不需要將所有字段列出。接下來,就是針對各個算法的評估結果,找出合適的算法,然后將模型保存下來以便后續使用:


var regressionMetrics = session.TrainAndEvaluate(trainingDataView, testingDataView);

foreach (var item in regressionMetrics)

{

????LearningSession.OutputRegressionMetrics(item.Key, item.Value);

}

var winnerAlgorithmName = regressionMetrics.OrderBy(x => x.Value.Rms).First().Key;

Console.WriteLine($"最優算法為:{winnerAlgorithmName}");

Console.WriteLine();

var winnerModel = session.GetTrainedModel(winnerAlgorithmName);

using (var fileStream = new FileStream(ModelFileName, FileMode.Create, FileAccess.Write))

{

????mlContext.Model.Save(winnerModel, fileStream);

}

此處,使用Root Mean Squared Error的評估值作為參考,得出Rms取值最小的回歸算法作為最優算法。保存的模型為一個ZIP文件,在后續的API構建部分,會使用這個ZIP文件保存的訓練模型,來構建RESTful API。上述代碼就不詳細分析了,Github上有完整的源代碼。

本文簡要介紹了基于學生成績預測的機器學習案例,并介紹了數據分析與清洗工作的一些思路,之后,大致介紹了一下基于ML.NET進行模型訓練、算法評估和模型保存的過程。在下文中,我會介紹如何基于產生的模型,構建RESTful API。

原文地址:https://sunnycoding.cn/2019/05/05/mlnet-containerize-and-azure-devops-practices-part2/

.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

總結

以上是生活随笔為你收集整理的ML.NET机器学习、API容器化与Azure DevOps实践(二):案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。