我正在使用ML.NET进行多类分类。我有3个用例具有不同的输入模型(不同的列数和数据类型),并且还会有更多用例,因此不必为每个新用例的每个输入模型创建一个物理文件就没有意义了。我希望最好只有一个物理文件,如果可能的话,它可以适应任何模型,如果不能,则根据从Sql Server DB中的表检索的json字符串定义的列定义,在运行时动态创建输入模型。 。这有可能吗?如果可以,您可以共享示例代码吗?
以下是一些我想设为通用的预测代码片段:-
public class DynamicInputModel
{
[ColumnName("ColumnA"), LoadColumn(0)]
public string ColumnA { get; set; }
[ColumnName("ColumnB"), LoadColumn(1)]
public string ColumnB { get; set; }
}
PredictionEngine<DynamicInputModel, MulticlassClassificationPrediction> predEngine = _predEnginePool.GetPredictionEngine(modelName: modelName);
IDataView dataView = _mlContext.Data.LoadFromTextFile<DynamicInputModel>(
path: testDataPath,
hasHeader: true,
separatorChar: ',',
allowQuoting: true,
allowSparse: false);
var testDataList = _mlContext.Data.CreateEnumerable<DynamicInputModel>(dataView, false).ToList();
答案 0 :(得分:0)
我认为您无法执行DynamicInput,但是您可以从一个输入模式创建管道,并基于标签/功能创建多个不同的模型。我在下面的示例中执行此操作...两个标签列,您可以传入用于模型的要素列的数组。这种方法的缺点是输入模式(CSV /数据库)必须是静态的(在加载时不能更改):