ML.NET-加载可变数量的功能列

时间:2018-09-14 13:02:22

标签: c# machine-learning ml.net

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

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

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

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

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

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:1)

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

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