ML.NET 跳过数据集中的列

ML.NET skipping columns from datasets

我有一个问题。正如我们所知,ML.NET 是一个很棒的 .NET 框架,它通过 "yourself" 做了很多事情,所以有时很难深入内部。

我有包含 30 个不同特征的数据集。我怕过拟合,所以我在寻找最简单的方法来删除不需要的。

例如,如果我想跳过第一列,我的 Data.CS 可以这样吗?:

    //skipped Column 0

    [Column(ordinal: "1")]
    public float RadiusMean;

    [Column(ordinal: "2")]
    public float TextureMean;

    [Column(ordinal: "3")]
    public float PerimeterMean;

我注意到,我们可以通过从特征中删除列来做到这一点;

pipeline.Add(new ColumnConcatenator(outputColumn: "Features",
            "TextureMean",
            "PerimeterMean",
            "AreaMean",
            //delete not necessery columns

由此,我们可以改进我们的结果。但是,如果它像训练模型的 "deleting" 列一样工作?

第二个问题,有没有更快的制作柱子的方法?或者 ML.NET 中可能有从数据集中获取列的方法?

第一个问题:Data.cs中的输入class中删除列意味着TextLoader将在读入时跳过该列文件。如果您根本不想使用它,这可能是最好的选择。

如果您不在 "Features" 列中包含该列,它将不会包含在训练中。学习者默认查看 "Features" 和 "Label" 列,因此不会使用其他列。但是,您仍然在支付阅读专栏的费用。如果您想将该列用于特征工程而不是训练,这可能很有用。

第二个问题:可以读入多列,如图here。这会将 784 个数字特征读入一列。

新的 API 将使许多专栏中的内容更易于阅读,如图 here 所示。这会将 10 列读入一个 "features" 向量列。

使用新的 API,模型自省将变得更加容易,这样您就可以了解哪些功能很重要,从而帮助您决定要包含哪些功能。

注意:我在 ML.NET 团队。