我有一个问题。众所周知,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中有一种方法可以从数据集中获取列?
答案 0 :(得分:2)
第一个问题:从Data.cs
的输入类中删除该列意味着TextLoader
在读取文件时将跳过该列。如果您根本不想使用它,那么这可能是最好的选择。
如果您未在“功能”列中包括该列,则该列将不会包含在培训中。学习者默认情况下查看“功能”和“标签”列,因此将不使用其他列。但是,您仍然需要在该列中支付阅读费用。如果您想将该列用于要素工程而不是在培训中使用,这可能会很有用。
第二个问题:可以读入多列,如here所示。这会将784个数字特征读入一列。
新的API将使您更容易在许多列中进行阅读,如here所示。这会将10列读入一个“功能”向量列。
使用新的API,模型自省会更容易,因此您可以查看哪些重要功能可帮助您决定要包括哪些功能。
注意:我是ML.NET团队的成员。