ML.NET Cookbook:(16)什么是规范化?为什么我需要关心?
在ML.NET中,我們公開了許多參數和非參數算法[1]。
通常,參數學習器對訓練數據持有一定的假設,如果不滿足這些假設,訓練就會受到極大的阻礙(有時甚至完全不可能)。
最常見的假設是
所有特征的值大致相同;
特征值不太大,也不太小。
違反上述第一個假設會導致學習器訓練一個次優模型(甚至是一個完全無用的模型)。違反第二個假設會導致算術錯誤累積,這通常會完全中斷訓練過程。
一般來說,如果您使用參數化學習器,您需要確保您的訓練數據正確縮放。
ML.NET提供了幾種內置的縮放算法或“規范化器”:
MinMax 規范化器:對于每個特征,我們學習它的最小值和最大值,然后線性地重新縮放它,使值在-1和1之間。
均值-方差規范化器:對于每個特征,計算均值和方差,然后將其線性重縮放為零均值、單位方差。
CDF 規范化器:對于每個特征,計算均值和方差,然后將每個值x替換為Cdf(x),其中Cdf是具有這些均值和方差的正態分布的累積密度函數。
裝箱規范化器:將特征值離散化為“N”個桶,然后用桶的索引替換每個值,除以“N-1”。
這些規范化器都有不同的屬性和權衡,但如果您要用一個來代替另一個,那也沒什么大不了的。只需確保在訓練線性模型或其他參數化模型時使用規格化器。
ML.NET規范化器的一個重要參數稱為fixZero。如果fixZero為true,則零輸入始終映射到零輸出。在處理稀疏數據時,這一點非常重要:如果不保留零,則會將所有稀疏數據轉換為密集數據,這通常是個壞主意。
將規范化器直接包含在ML.NET學習管道中是一種很好的做法:這樣可以確保規范化
只是訓練數據,而不是你的測試數據,
正確應用于所有新傳入的數據,而無需在預測時進行額外的預處理。
下面是演示學習管道規范化的代碼片段。它使用Iris數據集:
//Iris類的數據模型private?class?IrisInputAllFeatures {[ColumnName("Label"),?LoadColumn(4)]public?string?IgnoredLabel?{?get;?set;?}[LoadColumn(0,?3)]public?float?Features?{?get;?set;?} }//?加載訓練數據。 var?trainData?=?mlContext.Data.LoadFromTextFile<IrisInputAllFeatures>(dataPath,//?默認分隔符是tab,但數據集使用逗號。separatorChar:?',' );//?對原始特征應用MinMax規范化。 var?pipeline?=mlContext.Transforms.NormalizeMinMax("MinMaxNormalized",?"Features");//?讓我們訓練規范化器管道,然后將其應用于相同的數據。 var?normalizedData?=?pipeline.Fit(trainData).Transform(trainData);//?檢查結果數據集的一列。 var?minMaxValues?=?normalizedData.GetColumn<float[]>(normalizedData.Schema["MinMaxNormalized"]).ToArray();歡迎關注我的個人公眾號”My IO“參考資料
[1]
參數和非參數算法: https://machinelearningmastery.com/parametric-and-nonparametric-machine-learning-algorithms/
總結
以上是生活随笔為你收集整理的ML.NET Cookbook:(16)什么是规范化?为什么我需要关心?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF显示富文本emoji表情+文本(类
- 下一篇: asp.net ajax控件工具集 Au