【发布时间】:2019-03-13 15:20:50
【问题描述】:
对于 ML.NET 0.11,属性 MLContext.Transforms.Categorical 似乎只有 OneHotEncoding 和 OneHotHashEncoding 作为将分类值转换为特征的选项。我有一些具有高基数的数据列,使用数字表示可能会更好。我们在 ML.NET 中是否有这些选项,还是我需要先在外部对数据进行预处理?
【问题讨论】:
标签: ml.net
对于 ML.NET 0.11,属性 MLContext.Transforms.Categorical 似乎只有 OneHotEncoding 和 OneHotHashEncoding 作为将分类值转换为特征的选项。我有一些具有高基数的数据列,使用数字表示可能会更好。我们在 ML.NET 中是否有这些选项,还是我需要先在外部对数据进行预处理?
【问题讨论】:
标签: ml.net
您可以将它们转换为 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 |
【讨论】:
mlContext.Transforms.Concatenate("Features",...,"MapValueToKeyFeature",...") 时,pipeline.Fit(data) 出现错误,说明 System.InvalidOperationException: 'Column 'MapValueToKeyFeature' is key.Concatenation of keys is unsupported.'。我是否错过了能够将此功能与其他功能连接起来的步骤?