ML.NET跳过数据集中的列

时间:2018-09-16 11:34:57

标签: c# ml.net

我有一个问题。众所周知,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中有一种方法可以从数据集中获取列?

1 个答案:

答案 0 :(得分:2)

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

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

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

新的API将使您更容易在许多列中进行阅读,如here所示。这会将10列读入一个“功能”向量列。

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

注意:我是ML.NET团队的成员。