1. 程式人生 > >.NET深度學習框架ML.NET入門筆記(一)

.NET深度學習框架ML.NET入門筆記(一)

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();
    }
}