1

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

4

1 回答 1

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     | 
于 2019-03-15T07:48:59.557 回答