One Hot 使用 ML.NET 对文本数组进行编码

OneHotEncoding an array of text with ML.NET

我有一个 class 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?

谢谢

我认为这应该可以正常工作:

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

当单热编码一个向量时,我们有两个选择:'bag',或'indicator'。 documentation.

中对它们进行了很好的介绍

简而言之,如果你有 K 个特征并且数据集中有 M 个不同的值,使用 'bag' 选项你将得到一个大小为 M 的计数向量,而使用 'indicator' 你将得到大小为 K*M 的 0 和 1 向量。