0

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

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

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

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

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

4

2 回答 2

1

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

 PredictionModel<ClassA, ClassAPrediction> model = pipeline.Train<ClassA, ClassAPrediction>();
于 2018-09-20T10:48:22.690 回答
1

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

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

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.
于 2018-09-14T13:59:22.533 回答