OneHot使用ML.NET编码文本数组

时间:2019-11-12 22:36:02

标签: .net machine-learning one-hot-encoding ml.net

我有一个InputData课,如下所示

public class InputData
{
    public string[] TextFields { get; set; }
    public float[] NumericFields { get; set; }
}

构建管道时,我可以用1行代码轻松将NumericFields转换为数字特征

var numFeatures = MlContext.Transforms.Concatenate("NumFeatures", nameof(InputData.NumericFields));

但是我找不到一种热编码TextFields

的方法

根据https://docs.microsoft.com/en-us/dotnet/api/microsoft.ml.categoricalcatalog.onehotencoding的示例,每个文本字段都需要具有自己的属性,然后可以添加为

MlContext.Transforms.Categorical.OneHotEncoding("TextField1", "TextField2" ....);

有没有更优雅的方法可以快速对文本字段数组进行OneHotEncoding?

谢谢

1 个答案:

答案 0 :(得分:1)

我认为这应该很好:

mlContext.Transforms.Categorical.OneHotEncoding("TextFeatures")

矢量进行一次热编码时,我们有两个选择:“袋子”或“指示器”。 documentation中对它们的介绍很好。

简而言之,如果您具有K个特征并且数据集中有M个不同的值,则使用“ bag”选项将获得一个大小为M的计数向量,而使用“ indicator”将获得一个值为0的向量,并且大小为K * M的1s。