<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ML.Net機器學習基本知識

      安裝依賴包:

      • Microsoft.ML : ML.Net的主要依賴包, 一般安裝這個就夠了, 提供標準算法庫和ML context和pipeline的核心類庫
      • Microsoft.Extensions.ML , 為ML包支持依賴注入
      • Microsoft.ML.FastTree, 提供隨機森林相關的回歸算法
      • Microsoft.ML.LightGbm, 提供 LightGbm 梯度提升集成算法
      • Microsoft.ML.OnnxTransformer, 提供導入 onnx 模型能力
      • Microsoft.ML.OnnxConverter, 提供導出 onnx 模型能力
      • Microsoft.ML.AutoML, 實現自動超參調優

      除了常規的機器學習外, Microsoft.ML 可基于下面深度學習框架, 搭建常用的深度神經網絡:

      • TorchSharp
      • TensorFlow.NET

      自定義模型的 ModelInput 類:

      ModelInput 作為模型輸入數據 IDataView 的 Row class, 為模型提供 Feature列(1個或多個) 和 Label(1個).

      兩個特性的作用:

      • [ColumnName] 用來設定列名, 如果沒有使用該特性, 模型將按照C#字段名來使用該列.
      • [LoadColumn] 用來設定該類對應 Txt 的第幾個列, 需要從 0 開始.

      如前所述, ModelInput將為模型提供 Feature 列(1個或多個) 和 Label(1個). 其中 Label 列將作為模型train data的結果標簽, 對于回歸類模型, Label 字段應該為 float, 對于分類模型, Label 列可以使字符串或數值類型, 如果是字符串型, 需要在pipeline中將它轉成數值型. Label 列可以在 ModelInput 類字段上使用 ColumnName("Label") 特性來設定, 也可以在 pipeline 中使用 Context.Transforms.CopyColumns() 來動態指定 Label 對應的字段名.

      模型還需要 Features 信息, 不能直接使用C#特性來設定, 需要在Pipeline中用代碼設定.

      public class ModelInput
       {
          [ColumnName("Temperature"), LoadColumn(0)]
          public float Temperature { get; set; }
      
          [ColumnName("Luminosity"), LoadColumn(1)]
          public float Luminosity { get; set; }
      
          [ColumnName("Infrared"), LoadColumn(2)]
          public float Infrared { get; set; }
      
          [ColumnName("Distance"), LoadColumn(3)]
          public float Distance { get; set; }
      
          [ColumnName("CreatedAt"), LoadColumn(4)]
          public string CreatedAt { get; set; }
      
          [ColumnName("Label"), LoadColumn(5)]
          public string Source { get; set; }
          }
      

      自定義回歸模型的 ModelOutput 類:

      針對不同的 estimator, ModelOuput 需要有不同的 IDataView Row class, 可以使用 [ColumnName()] 特性為C#字段設定成estimator要求的列名.

      Regression

      • Label: Original regression value of the example.
      • Score: Predicted regression value.

      Binary Classification

      • Label: Original Label of the example.
      • Score: Raw score from the learner (e.g. value before applying sigmoid function to get probability).
      • Probability: Probability of being in certain class
      • PredictedLabel: Predicted class.

      Multi-class Classification

      • Label: Original Label of the example.
      • Score: Its an array whose length is equal to number of classes and contains probability for each class.
      • PredictedLabel: Predicted class.

      Clustering

      • Label: Original cluster Id of the example.
      • Score: Its an array whose length is equal to number of clusters. It contains square distance from the cluster centeriod.
      • PredictedLabel: Predicted cluster Id.
        public class ModelOutput
          {
              [ColumnName("Score")]
              public float TotalStockQty;
          }
      

      Pipeline 的構成

      • Pipeline 包含一系列前置 transformers 和一個 estimator 和一系列后置的 transformers
      • 前置 transformer 完成數據的預處理過程, transformer 的輸入和輸出都是 IDataView 數據. IDataView 數據是一個帶有 schema 信息的、 immutable、lazy loading的高效數據容器. 通常預處理包括: 刪除某些列、 Categorical 矢量化 、Label 列數值化、歸一化處理、 聚合 Features 。
      • estimator 用作模型訓練.
      • 后置 transformer 完成數據的后處理過程, transformer 的輸入和輸出都是 IDataView 數據, 后處理過程不像前處理過程復雜, 很多情況下沒有后處理過程, 除非前處理過程中包含了Label 列數值化, 這時候我們需要加一個后處理過程將 PredictedLabel 列進行可讀性處理, 即將數值key轉換成value。

      Pipeline 的預處理

      Label 列數值化: 對于分類模型, Label 往往是一個類別字符串, 比如顏色分類或產品分類, 在訓練的Pipeline中需要將它們做數值化. 調用的函數是 Transforms.Conversion.MapValueToKey() , 該函數會為 Label 的所有可能值分配一個唯一正整數, 在訓練過程中, 會使用該正整數值來代替原始值.
      如果預處理階段做了 Label 列數值化處理, 通常在pipeline后處理中要增加一個 MapKeyToValue() 逆向轉換, 以便使用該模型做推理時候, 輸出的label具有更好的可讀性, 如果推理結果出現了未知類別, 默認會分配0值.

      mlContext.Transforms.Conversion.MapValueToKey("Label")
      

      OneHot Encoding(即Categorical 信息矢量化)
      對于 ModelInput 類, 如果要將某個文本字段被我們識別需要作為一個特征 Feature, 通常這類文本可以看做是 Categorical 類別信息, 我們需要先將類別信息做矢量化, 然后再進行 Features 聚合前置處理, 以便機器學習 estimator 能處理這些特征.
      一般 Categorical 字段有兩種取值:

      1. 一種取值為 "abc" 這樣的字段
      2. 另一種是代表編號的數值字段, 編號雖然是數值, 但它并不是數學上的數值, 因為無法做大小比較, 無法做數學運算.

      矢量化方式通常是采用 One-hot encoding 編碼, 經過這樣的編碼后, 它們在內存中被映射成一個稀疏的數值矩陣.

      mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "label_hotencoded", inputColumnName: "label")
      

      特征值歸一化處理

      • 背景: 不同特征的取值范圍差異可能很大, 比如有的特征其中范圍是[0,1], 有的特征是[0,1000]之間; 或者特征值的單位不同, 一個是質量一個是長度, 可以在模型訓練之前, 先對特征值進行歸一化處理,盡量將各個特征的參數值規范到一個合理的差異水平, 避免因為個別特征值太大主導模型訓練.

      • 模型類型:
        (1) 對于線性模型 SdcaRegressionTrainer、SdcaMaximumEntropyTrainer 等, 這些模型對于特征值大小比較敏感, 如果特征值取值范圍差異過大, 模型權重可能會失衡, 會影響到模型效果.

        (2) 對于決策樹類模型, 它們是通過特征分裂進行決策的, 并不直接依賴特征值, 所以一般不需要做歸一化, 當然也可以通過歸一化加速模型收斂速度.

        (3) 對于NLP類模型, 無需進行歸一化處理.

      • 歸一化算法
        (1) Min-Max Normalization , 將特征統一縮放到 [0,1] 之間. 適用于數值差異較大的情況, 但它對于 outliers 數值很敏感, 此時可以考慮使用其他歸一化算法, 或者提前將這些 outliers 過濾掉.
        (2) Mean Variance Normalization, 將均值設定為0, 標準差設定為1, 適用于正態分布的數據.
        (3) Logarithmic Scaling 指數縮放算法, 將特征值有數量級差異, 適用于數據差異非常大, 呈指數增長.
        (4) Binning Normalization, 將連續值轉換成離散值.

      • 強調:
        (1) 歸一化操作僅僅需要在訓練的pipeline中設置, 完成模型訓練后, 歸一化的操作已經保存到模型參數中了, 所以在推理時候無需顯式做歸一化處理, 模型在推理時自動會應用歸一化算法.
        (2) 歸一化操作放在pipeline

      Features 列向量化前置處理
      如果Features列是自然語言, 需要將文本轉換成特征向量.
      mlContext.Transforms.Text.FeaturizeText(outputColumnName: "Features", inputColumnName: "SentimentText")

      Features 聚合前置處理
      如果我們的 ModelInput 類有多個 feature 列, 則需要將這些列聚合到一個名稱 Features 列, 這樣 estimator 就知道需要將哪些列作為特征來對待.

      mlContext.Transforms.Concatenate("Features",
          new string[] { "Temperature", "Luminosity", "Infrared", "Distance" })
      

      Pipeline 的后處理

      后置 transformer 完成數據的后處理過程, transformer 的輸入和輸出都是 IDataView 數據, 后處理過程不像前處理過程復雜, 很多情況下沒有后處理過程, 除非前處理過程中包含了Label 列數值化, 這時候我們需要加一個后處理過程將 PredictedLabel 列進行可讀性處理, 即將數值key轉換成value。

      mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel");
      

      分析模型的特征重要度

      在模型訓練完畢, 通常我們需要了解各個特征的重要程度, 分析的目的有: (1) 理解模型是如何決策的, 尤其對于黑箱模型, 如隨機森林和梯度提升樹. (2) 排除無關或冗余的特征, 然后重新訓練, 以提供模型的泛化能力.

      常用方法

      批量和單一推理

        //對測試數據集進行批量預測.
        var metrics = mlContext.Regression.Evaluate(model.Transform(testData), labelColumnName: "Target");
      
        //使用 predictor單獨一個數據進行預測.
        var predictor = mlContext.Model.CreatePredictionEngine<IrisInput, IrisPrediction>(model);
        var prediction = predictor.Predict(new IrisInput
          {
              SepalLength = 4.1f,
              SepalWidth = 0.1f,
              PetalLength = 3.2f,
              PetalWidth = 1.4f
          });
      

      當模型訓練完成后, 獲取混淆矩陣

       var metrics = mlContext.MulticlassClassification.Evaluate(predictions, Label, Score, PredictedLabel);
       Console.WriteLine(metrics.ConfusionMatrix.GetFormattedConfusionTable());
      

      當模型訓練完成后, 可以獲取模型的權重和偏置項.

        VBuffer <float>[] weights = default;
        model.Model.GetWeights(ref weights,   out int numClasses);
        var biases = model.Model.GetBiases();
      

      輸出特征重要性

      var featureImportance = mlContext.Regression.PermutationFeatureImportance(
          model.LastTransformer,
          transformedTestData,
          labelColumnName: "Label");
      
      // 輸出特征重要性分數, 分數越接近0的特征越不重要
      for (int i = 0; i < featureImportance.Length; i++)
      {
          Console.WriteLine($"Feature {i}: Importance = {featureImportance[i].Rms.Mean:F4}");
      }
      

      關于交叉驗證

      最常用的是 5 折交叉驗證法, 因為它符合20:80數據分割規則. 5折交叉驗證的程是, 先將數據集分成 5 等份, 然后開始 5 次驗證過程, 所以交叉驗證是比較耗時的.
      交叉驗證完整過程:

      • 第1次驗證: 將第1等份數據作為驗證數據集, 其他4份作為訓練數據集, 先訓練后驗證, 得出第1次的驗證.
      • 第2次驗證: 將第2等份數據作為驗證數據集, 其他4份作為訓練數據集, 先訓練后驗證, 得出第2次的驗證.
      • 第3次驗證: 將第3等份數據作為驗證數據集, 其他4份作為訓練數據集, 先訓練后驗證, 得出第3次的驗證.
      • 第4次驗證: 將第4等份數據作為驗證數據集, 其他4份作為訓練數據集, 先訓練后驗證, 得出第4次的驗證.
      • 第5次驗證: 將第5等份數據作為驗證數據集, 其他4份作為訓練數據集, 先訓練后驗證, 得出第5次的驗證.
      • 最后將5次驗證的指標做平均/方差計算得到交叉驗證的指標.

      評估模型

      https://www.todaysoftmag.com/article/3286/machine-learning-101-with-microsoft-ml-net-part-1-3
      https://www.todaysoftmag.com/article/3290/machine-learning-101-with-microsoft-ml-net-part-2-3
      https://rubikscode.net/2021/04/12/machine-learning-with-ml-net-evaluation-metrics/
      https://learn.microsoft.com/en-us/dotnet/machine-learning/resources/metrics

      Auto ML

      https://accessibleai.dev/post/ml_net-video-game-classification/
      https://learn.microsoft.com/en-us/dotnet/machine-learning/automate-training-with-model-builder#how-long-should-i-train-for

      posted @ 2025-05-05 21:28  harrychinese  閱讀(122)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品中文字幕少妇| 国产精品不卡一区二区在线| 亚洲区成人综合一区二区| 四虎库影成人在线播放| 久久99九九精品久久久久蜜桃| 亚洲男人精品青春的天堂| 久久AV中文综合一区二区| 亚洲AV无码破坏版在线观看| 好吊视频一区二区三区人妖| 国产乱码精品一品二品| 中文字幕亚洲人妻一区| 欧美xxxx精品另类| 久久爱在线视频在线观看| 中文字幕无码不卡在线| 久久国产精品二国产人妻| 国产不卡一区二区四区| 久久亚洲中文字幕不卡一二区| 久久国产精品亚洲精品99| 亚洲精品一区二区区别| 久久亚洲私人国产精品| 午夜福利日本一区二区无码| 欧美日韩国产va在线观看免费| 国产高清自产拍av在线| 国产蜜臀一区二区在线播放| 欧美亚洲h在线一区二区| 亚洲国产一区二区精品专| 成人午夜电影福利免费| 天天爽夜夜爱| 精品一区二区三区不卡| 苍井空一区二区波多野结衣av| 国产日韩久久免费影院| 无卡无码无免费毛片| 久久99精品久久久大学生| 亚洲欧美日韩在线码| 日韩高清亚洲日韩精品一区二区 | 国产午夜精品一区理论片| 免费无码肉片在线观看| 97色伦97色伦国产| L日韩欧美看国产日韩欧美| 亚洲精品福利一区二区三区蜜桃| 中文字幕亚洲制服在线看|