0

我有个问题。众所周知,ML.NET 是 .NET 的一个了不起的框架,它通过“自己”做很多事情,所以有时很难深入到里面。

我有具有 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

通过这个,我们可以改进我们的结果。但如果它像“删除”训练模型的列一样工作?

第二个问题,是否有更快的方法来制作列?或者也许 ML.NET 中有从数据集中获取列的方法?

4

1 回答 1

2

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

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

第二个问题:可以读取多个列,如此处所示。这会将 784 个数字特征读入一列。

新的 API 将使许多列更易于阅读,如此处所示。这会将 10 列读入一个“特征”向量列。

使用新的 API,模型自省将变得更容易,因此您可以查看哪些功能很重要,可以帮助您决定要包含哪些功能。

注意:我在 ML.NET 团队。

于 2018-09-16T18:26:51.670 回答