ML.NET - загрузка переменного количества столбцов объектов - PullRequest
0 голосов
/ 14 сентября 2018

Я бы хотел общий обучающий конвейер (например, из N функций предсказываем метку), в том смысле, что один из моих входных CSV будет иметь 5 функций, а другой - 10 функций (эти дваОчевидно, что CSV будут производить разные модели, я не хочу их никоим образом комбинировать, я просто хочу запустить одну и ту же программу на обоих CSV).

Однако для загрузки функций мне нужно использовать

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

, где ClassA определяет мою схему.Его свойства должны отражать формат CSV, поэтому CSV должен всегда иметь одинаковое количество столбцов.

Я заметил CustomTextLoader, но он устарел.Есть идеи?Спасибо.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

jaket - спасибо за ваш ответ. Я вижу, как это будет работать при загрузке данных в TextLoader. Однако как бы вы тогда тренировали модель? так как метод конвейера Train () также требует, чтобы вы передали объект, определяющий схему данных:

 PredictionModel<ClassA, ClassAPrediction> model = pipeline.Train<ClassA, ClassAPrediction>();
0 голосов
/ 14 сентября 2018

Взглянув на источник: (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.
...