【问题标题】:High-Cardinality Categorical Values in ML.NET 0.11 for Multiclass Classification ModelML.NET 0.11 中用于多类分类模型的高基数分类值
【发布时间】:2019-03-13 15:20:50
【问题描述】:

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

【问题讨论】:

    标签: ml.net


    【解决方案1】:

    您可以将它们转换为 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     | 
    

    【讨论】:

    • 还有一个后续问题:如果我们将其更改为 KeyType,是否意味着它不会作为连接转换的一部分进行计算,对吗?与仅使用大型 one-hot 编码相比,这会更好或更糟(或取决于)吗?
    • 您可以将它们与其他功能连接起来。当许多行共享相同的值时,一个热应该更好。 IDK 你的数据,也许你可以对你的值进行聚类以降低基数。
    • 当我尝试执行 mlContext.Transforms.Concatenate("Features",...,"MapValueToKeyFeature",...") 时,pipeline.Fit(data) 出现错误,说明 System.InvalidOperationException: 'Column 'MapValueToKeyFeature' is key.Concatenation of keys is unsupported.'。我是否错过了能够将此功能与其他功能连接起来的步骤?
    • 你说的太对了。我的错!我从这个样本中推断出:github.com/dotnet/machinelearning-samples/tree/master/samples/… 但没有串联。我认为您可以再次将其转换为矢量的关键。我在等你的结果。
    • 而且,也许您可​​以使用 PCA。 github.com/dotnet/machinelearning-samples/tree/master/samples/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多