ML.NET 0.11中用于多类分类模型的高基数分类值

时间:2019-03-13 15:20:51

标签: ml.net

对于ML.NET 0.11,属性MLContext.Transforms.Categorical似乎只有OneHotEncodingOneHotHashEncoding作为将分类值转换为要素的选项。我有一些基数较高的数据列,使用数字表示可能会更好。我们在ML.NET中是否具有该选项,还是需要先在外部进行预处理?

1 个答案:

答案 0 :(得分:2)

您可以将它们转换为KeyType而不是数字值。

var rnd = new Random();
var enumerable = Enumerable.Range(1, 1000)
                           .Select(n => new Row { Email = "sadas" + rnd.Next(1, 41) + "@so.com"
                                                  Label = rnd.Next(1, 6).ToString() });
var context = new MLContext();
var data = context.Data.LoadFromEnumerable(enumerable);
var pipeline = context.Transforms.Conversion.MapValueToKey(nameof(Row.Email));
var preview = pipeline.Fit(data).Transform(data).Preview(10);

抽样结果:

| Email          | Email | Label | 
|----------------|-------|-------| 
| sadas25@so.com | 39    | 3     | 
| sadas7@so.com  | 1     | 4     | 
| sadas13@so.com | 10    | 1     | 
| sadas27@so.com | 33    | 4     | 
| sadas5@so.com  | 19    | 4     | 
| sadas31@so.com | 4     | 2     | 
| sadas2@so.com  | 38    | 4     | 
| sadas22@so.com | 25    | 2     | 
| sadas37@so.com | 36    | 5     | 
| sadas32@so.com | 26    | 2     |