ML.NET - 加载可变数量的特征列

ML.NET - Loading variable number of feature columns

我想要一个 general 学习管道(例如,从 N 个特征预测一个标签),因为我的一个输入 CSV 将具有 5 个特征,另一个将有 10 个特征(这两个 CSV 显然会产生不同的模型,我不想以任何方式组合它们,我只想 运行 两个 CSV 上的相同程序)。

但是,要加载功能,我需要使用

TextLoader(...).CreateFrom<ClassA>()

其中 ClassA 定义了我的架构。它的属性需要反映 CSV 格式,因此 CSV 必须始终具有相同的列数。

我注意到 CustomTextLoader 但它已经过时了。有任何想法吗?谢谢。

查看源代码:(https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML/Data/TextLoader.cs)

CreateFrom 看起来只不过是填充 Arguments.Columns 和参数的辅助方法,这两者都是公开访问的。这意味着您可以编写自己的实现。

TextLoader tl = new TextLoader(inputFileName)
tl.Arguments.HasHeader = useHeader;
tl.Arguments.Separator = new[] { separator };
tl.Arguments.AllowQuoting = allowQuotedStrings;
tl.Arguments.AllowSparse = supportSparse;
tl.Arguments.TrimWhitespace = trimWhitespace;

现在是重要的部分,您需要为数据集中的每一列填充一个 TextLoader。Arguments.Columns。如果您提前知道您将拥有 5 或 10 列,那将是最简单的,但除此之外,我会查看 CSV 文件以找出答案。

tl.Arguments.Column = new TextLoaderColumns[numColumns];
tl.Arguments.Column[0].Name = ...
tl.Arguments.Column[0].Source = ... // see the docs
tl.Arguments.Column[0].Type = ...
// and so on.

jaket - 谢谢你的回答。我可以看到将数据加载到 TextLoader 中是如何工作的。但是,您将如何训练模型?因为管道 Train() 方法还需要您传入定义数据模式的对象:

 PredictionModel<ClassA, ClassAPrediction> model = pipeline.Train<ClassA, ClassAPrediction>();