VS Code + ML.NET 玩转交互式机器学习
在上一篇文章中,我們介紹了 .NET Interactive Notbook,可以進行代碼實時運行和交互式展示。
這對于ML.NET來說非常棒,可以運用到許多場景,比如數據探索、繪制數據圖表、編制教學課件等。
下面,我們就用出租車費預測(https://github.com/feiyun0112/machinelearning-samples.zh-cn/tree/master/samples/csharp/getting-started/Regression_TaxiFarePrediction)來進行演示。
1.創建Notebook
首先,VS Code需要安裝“.NET Interactive Notebooks”擴展。
新建文件,編程語言選擇“.NET Interactive”,保存文件名后綴為“.ipynb”。
添加Markdown標記,說明一下這個機器學習任務要解決的問題場景。
完成編輯后,可以自動顯示Markdown標記結果:
2.安裝Nuget包
引用后面需要使用的NuGet包,這里,我們將使用ML.NET進行機器學習和XPlot繪制圖表。
運行代碼,下載和安裝NuGet包。
可以看到,安裝時間還是比較長的,所以可以放在單獨的代碼塊提前運行。
3.定義DataStructures
定義加載數據以及訓練或預測時,需要使用輸入類和預測類,代碼如下:
?public?class?TaxiTrip {[LoadColumn(0)]public?string?VendorId;[LoadColumn(1)]public?string?RateCode;[LoadColumn(2)]public?float?PassengerCount;[LoadColumn(3)]public?float?TripTime;[LoadColumn(4)]public?float?TripDistance;[LoadColumn(5)]public?string?PaymentType;[LoadColumn(6)]public?float?FareAmount; }4.加載數據
加載訓練和測試數據集,文件放在Notebook同一目錄下:
MLContext?mlContext?=?new?MLContext(seed:?0);string?TrainDataPath?=?"./taxi-fare-train.csv"; string?TestDataPath?=?"./taxi-fare-test.csv"; IDataView?baseTrainingDataView?=?mlContext.Data.LoadFromTextFile<TaxiTrip>(TrainDataPath,?hasHeader:?true,?separatorChar:?','); IDataView?testDataView?=?mlContext.Data.LoadFromTextFile<TaxiTrip>(TestDataPath,?hasHeader:?true,?separatorChar:?',');IDataView?trainingDataView?=?mlContext.Data.FilterRowsByColumn(baseTrainingDataView,?nameof(TaxiTrip.FareAmount),?lowerBound:?1,?upperBound:?150); display(h4("展示訓練數據:")); var?someRows?=?mlContext.Data.CreateEnumerable<TaxiTrip>(trainingDataView,?reuseRowObject:?false).Take(4).ToArray(); display(someRows);我們篩選了出租車票金額在1-150之間的數據作為訓練數據,并用內置函數display展示4行訓練數據內容:?
5.圖形化展示數據
圖形方式能讓我們更好地理解數據,選取100條訓練數據,看看費用的分布情況:
var?faresHistogram?=?Chart.Plot(new?Histogram()?{?x?=?trainingDataView.GetColumn<float>("FareAmount").Take(100).ToArray(),?autobinx?=?false,?nbinsx?=?20?}); var?layout?=?new?Layout.Layout()?{?title?=?"出租車費分布"?}; faresHistogram.WithLayout(layout); faresHistogram.WithXTitle("費用范圍"); faresHistogram.WithYTitle("出行數");display(faresHistogram)可以看到費用大多數在5-10之間,?
6.訓練模型
現在,讓我們真正開始執行機器學習。我們將首先處理數據轉換,然后添加訓練器/算法,最后訓練模型。
在執行窗口底部可以看到,訓練速度還是比較快的,在我的機器上只需要1.7秒。
7.評估模型
我們需要這一步來總結我們的模型對新數據的準確性。為此,上一步中的模型針對另一個未在訓練中使用的數據集運行(taxi-fare-test.csv)。此數據集也包含已知的費用。Regression.Evaluate()計算已知費用和模型預測的費用之間差異的各種指標。
IDataView?predictions?=?trainedModel.Transform(testDataView); var?metrics?=?mlContext.Regression.Evaluate(predictions,?labelColumnName:?"Label",?scoreColumnName:?"Score");display(metrics)6.繪制對比圖
最后,我們繪制預測與實際值的對比圖。如果回歸模型工作得很好,那么這些點大部分應該是圍繞著一條直線的,這條直線就是回歸線。
回歸線越接近“完美”(預測值等于測試數據集中的實際值),模型的質量就越好。
結論
后面的保存和使用模型,我們就不再演示了,請大家自行探索。
通過上面的示例,可以看到非常棒的交互體驗。歡迎大家繼續挖掘.NET Interactive的潛力,玩轉交互式機器學習!!!
歡迎關注我的個人公眾號”My IO“
總結
以上是生活随笔為你收集整理的VS Code + ML.NET 玩转交互式机器学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么async/await方法不能有l
- 下一篇: 面向.NET开发人员的Dapr——参考应