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>();
我想要一个 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>();