日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ML.NET Cookbook:(17)如何在分类数据上训练模型?

發布時間:2023/12/4 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ML.NET Cookbook:(17)如何在分类数据上训练模型? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般來說,所有的ML.NET學習器都希望這些特征是一個浮點向量。因此,如果您的一些數據不是一個float,您需要將其轉換為float。

如果我們的數據包含“分類”特征(比如“enum”),我們需要以某種方式對它們進行“特征化”。ML.NET提供了幾種將分類數據轉換為功能的方法:

  • 獨熱編碼

  • 基于哈希的獨熱編碼

  • 二進制編碼(將類別索引轉換為位序列并使用位作為特征)

如果某些類別的基數非常高(有很多不同的值,但通常只有幾個),那么獨熱編碼可能是浪費的。我們可以使用基于計數的特征選擇來減少我們編碼的槽的數量。

與規范化一樣,將分類特征化直接包含在ML.NET學習管道中是一種很好的做法:這樣您就可以確保分類轉換

  • 只是在訓練數據上“訓練”,而不是在你的測試數據上,

  • 正確應用于所有新傳入的數據,而無需在預測時進行額外的預處理。

下面是成人普查數據集[1]的分類處理示例:

Label?Workclass?education?marital-status?occupation?relationship?ethnicity?sex?native-country-region?age?fnlwgt?education-num?capital-gain?capital-loss?hours-per-week 0?Private?11th?Never-married?Machine-op-inspct?Own-child?Black?Male?United-States?25?226802?7?0?0?40 0?Private?HS-grad?Married-civ-spouse?Farming-fishing?Husband?White?Male?United-States?38?89814?9?0?0?50 1?Local-gov?Assoc-acdm?Married-civ-spouse?Protective-serv?Husband?White?Male?United-States?28?336951?12?0?0?40 1?Private?Some-college?Married-civ-spouse?Machine-op-inspct?Husband?Black?Male?United-States?44?160323?10?7688?0?40 //?創建加載器:定義數據列以及它們在文本文件中的位置。 var?loader?=?mlContext.Data.CreateTextLoader(new[]?{new?TextLoader.Column("Label",?DataKind.Boolean,?0),//?我們將把所有分類特征加載到一個大小為8的向量列中。new?TextLoader.Column("CategoricalFeatures",?DataKind.String,?1,?8),//?類似地,將所有數字特征加載到一個大小為6的向量中。new?TextLoader.Column("NumericalFeatures",?DataKind.Single,?9,?14),//?讓我們單獨加載“Workclass”列。new?TextLoader.Column("Workclass",?DataKind.String,?1)},hasHeader:?true );//?加載數據。 var?data?=?loader.Load(dataPath);//?檢查分類列的前10條記錄以檢查它們是否被正確讀取。 var?catColumns?=?data.GetColumn<string[]>(data.Schema["CategoricalFeatures"]).Take(10).ToArray();//?建造多條可選的特征化管道。 var?pipeline?=//?將每個分類特征轉換為獨熱編碼。mlContext.Transforms.Categorical.OneHotEncoding("CategoricalOneHot",?"CategoricalFeatures")//?將所有分類特征轉換為索引,并構建一個“詞袋”。.Append(mlContext.Transforms.Categorical.OneHotEncoding("CategoricalBag",?"CategoricalFeatures",?OneHotEncodingEstimator.OutputKind.Bag))//?對workclass列進行獨熱編碼,然后刪除列集中少于10個實例的所有類別。.Append(mlContext.Transforms.Categorical.OneHotEncoding("WorkclassOneHot",?"Workclass")).Append(mlContext.Transforms.FeatureSelection.SelectFeaturesBasedOnCount("WorkclassOneHotTrimmed",?"WorkclassOneHot",?count:?10));//?讓我們訓練管道,然后將其應用于同一個數據上。 var?transformedData?=?pipeline.Fit(data).Transform(data);//?檢查結果數據集的某些列。 var?categoricalBags?=?transformedData.GetColumn<float[]>(transformedData.Schema["CategoricalBag"]).Take(10).ToArray(); var?workclasses?=?transformedData.GetColumn<float[]>(transformedData.Schema["WorkclassOneHotTrimmed"]).Take(10).ToArray();//?當然,如果我們想訓練模型,我們需要合成一個包含所有特征的浮點向量。 //?我們可以這樣做:var?fullLearningPipeline?=?pipeline//?連接3個分類管道中的2個,以及數字特征。.Append(mlContext.Transforms.Concatenate("Features",?"NumericalFeatures",?"CategoricalBag",?"WorkclassOneHotTrimmed"))//?將數據緩存在內存中,以便下面的訓練器能夠訪問訓練樣本,而無需從磁盤多次加載它們。.AppendCacheCheckpoint(mlContext)//?現在我們要訓練了。我們選擇了我們的FastTree訓練器來完成這個分類任務。.Append(mlContext.BinaryClassification.Trainers.FastTree(numTrees:?50));//?訓練模型。 var?model?=?fullLearningPipeline.Fit(data);


參考資料

[1]

成人普查數據集: https://github.com/dotnet/machinelearning/blob/main/test/data/adult.tiny.with-schema.txt

總結

以上是生活随笔為你收集整理的ML.NET Cookbook:(17)如何在分类数据上训练模型?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。