.NET深度學習框架ML.NET入門筆記(一)
阿新 • • 發佈:2018-12-30
ML.NET入門筆記
ML.NET機器學習框架是基於.NET core 2.x的,所以我們必須安裝.net core 2.x,然後順便安裝vs2017便於開發
1.建立專案
此例我們建立一個控制檯應用myApp,建立之後使用Nuget安裝 Microsoft.ML
安裝完成之後我們來使用ML框架來做一個小程式,通過給定一些訓練樣本訓練之後來預測花的品種 訓練樣本資料格式如下:
//萼片長度,萼片寬度,花瓣長度,花瓣寬度,品種
5.1,3.5,1.4,0.2,玫瑰花
4.9,3.0,1.4,0.2,玫瑰花
6.3,3.3,6.0,2.5,向日葵
...此處省略更多的資料
由此可見,上面每一行資料都是一個樣本,其中每行的數值部分叫做樣本的特徵,而最後一列則為此特徵的實際結果,那我們所做的就是利用大量的樣本學習之後,我們給出一組特徵值
比如1.2,3.5,1.4,0.6 然後在通過呼叫預測函式得到一個結果,比如結果就是玫瑰花或者其他的品種,好了,既然過程介紹完了就開始擼程式碼吧
1.首先為我們的樣本建立一個對應的實體類
///花的樣本實體類
public class IrisData
{
//萼片長度
[Column("0")]
public float SepalLength;
//萼片寬度
[Column("1" )]
public float SepalWidth;
//花瓣長度
[Column("2")]
public float PetalLength;
//花瓣寬度
[Column("3")]
public float PetalWidth;
//品種
[Column("4")]
[ColumnName("Label")]
public string Label;
}
///預測結果返回的實體類
public class IrisPrediction
{
[ColumnName("PredictedLabel")]
public string PredictedLabels;
}
主要的呼叫程式碼
class Program
{
static void Main(string[] args)
{
// 建立學習管道物件
var pipeline = new LearningPipeline();
// 載入樣本檔案,並用作,分隔符
string dataPath = "iris-data.txt";
pipeline.Add(new TextLoader<IrisData>(dataPath, separator: ","));
// 轉換資料
pipeline.Add(new Dictionarizer("Label"));
// 放入特徵向量
pipeline.Add(new ColumnConcatenator("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth"));
//為管道新增分類器演算法
pipeline.Add(new StochasticDualCoordinateAscentClassifier());
// 將Label轉換為原始文字
pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" });
// 訓練模型
var model = pipeline.Train<IrisData, IrisPrediction>();
// 使用訓練好的模型來預測結果
var prediction = model.Predict(new IrisData()
{
SepalLength = 3.3f,
SepalWidth = 1.6f,
PetalLength = 0.2f,
PetalWidth = 5.1f,
});
Console.WriteLine($"這朵花是: {prediction.PredictedLabels}");
Console.ReadKey();
}
}