C# 可枚举故障的ML.net负载

C# 可枚举故障的ML.net负载,c#,.net,ml.net,C#,.net,Ml.net,我一直在努力为ML.net创建合适的数据结构,并将其加载到我的应用程序中。本质上,我有一个应用程序,其中的训练数据是动态的,并且在运行之前不知道类型和/或大小。此外,我必须将训练数据从非标准的原始类型(即App_Bool或App_Number…而不是简单地使用Bool或double等)转换为训练数据,因此,当我尝试将训练数据转换为通用数据类型时,这已经证明是一个问题,然后可以使用函数从内存中加载。 我有四个基本数据类型类: public class MLIntData { public

我一直在努力为ML.net创建合适的数据结构,并将其加载到我的应用程序中。本质上,我有一个应用程序,其中的训练数据是动态的,并且在运行之前不知道类型和/或大小。此外,我必须将训练数据从非标准的原始类型(即App_Bool或App_Number…而不是简单地使用Bool或double等)转换为训练数据,因此,当我尝试将训练数据转换为通用数据类型时,这已经证明是一个问题,然后可以使用函数从内存中加载。 我有四个基本数据类型类:

public class MLIntData
{
    public MLIntData(string label, List<object> l)
    {
        Label = label;
        foreach (App_Integer element in l)
            Features.Add((int)element.Value);
    }

    public List<int> Features { get; set; } = new List<int>();
    public string Label { get; set; } = "";
}

public class MLNumberData 
{
    public MLNumberData(string label, List<object> l)
    {
        Label = label;
        foreach (App_Number element in l)
            Features.Add((double)element.Value);
    }

    public List<double> Features { get; set; } = new List<double>();
    public string Label { get; set; } = "";
}

public class MLBoolData 
{
    public MLBoolData(string label, List<object> l)
    {
        Label = label;
        foreach (App_Boolean element in l)
            Features.Add((bool)element.Value);
    }

    public List<bool> Features { get; set; } = new List<bool>();

    public string Label { get; set; } = "";
}

public class MLTextData
{
    public MLTextData(string label, List<object> l)
    {
        Label = label;
        foreach (App_String element in l)
            Features.Add(element.Value.ToString());
    }

    public List<string> Features { get; set; } = new List<string>();
    public string Label { get; set; } = "";
}
公共类MLIntData
{
公共MLIntData(字符串标签,列表l)
{
标签=标签;
foreach(l中的App_整数元素)
Features.Add((int)element.Value);
}
公共列表功能{get;set;}=new List();
公共字符串标签{get;set;}=”“;
}
公共类MLNumberData
{
公共MLNumberData(字符串标签,列表l)
{
标签=标签;
foreach(应用程序编号元素,单位为l)
添加((双)元素.Value);
}
公共列表功能{get;set;}=new List();
公共字符串标签{get;set;}=”“;
}
公共类MLBoolData
{
公共MLBoolData(字符串标签,列表l)
{
标签=标签;
foreach(l中的App_布尔元素)
Features.Add((bool)element.Value);
}
公共列表功能{get;set;}=new List();
公共字符串标签{get;set;}=”“;
}
公共类MLTextData
{
公共MLTextData(字符串标签,列表l)
{
标签=标签;
foreach(l中的App_字符串元素)
Features.Add(element.Value.ToString());
}
公共列表功能{get;set;}=new List();
公共字符串标签{get;set;}=”“;
}
因此,每个基类将包含一个数据标签,然后是一个特性列表,这些特性的类型可以是bool、double、int或string

现在,在我的ML.net代码中,我试图加载训练数据,然后创建一个数据对象。首先,我循环输入数据(最初是泛型类型的对象),然后创建新的数据类

List<object> data = new List<object>();

for(int i = 0; i < input.Count; i++)
{
    MLCodifiedData codifiedData = input[i].Value as MLCodifiedData;
    Type dataType = codifiedData.Features[0].GetType();

    if (dataType == typeof(App_Boolean))
    {
        data.Add(new MLBoolData(codifiedData.Label, codifiedData.Features));                       
    }
    else if (dataType == typeof(App_Number))
    {
        data.Add(new MLNumberData(codifiedData.Label, codifiedData.Features));
    }
    else if (dataType == typeof(App_Integer))
    {
        data.Add(new MLIntData(codifiedData.Label, codifiedData.Features));
    }
    if (dataType == typeof(App_String))
    {
        data.Add(new MLTextData(codifiedData.Label, codifiedData.Features));
    }
}

IDataView TrainingData = mlContext.Data.LoadFromEnumerable<object>(data);
列表数据=新列表();
for(int i=0;i
我试着创造一个(它可以作为LoadFromEnumerable方法中的第二个参数传入,但我似乎无法实现。我也尝试过使用创建模式来创建模式,但似乎也不起作用。现在,我正在使用其中一个。为了抢先回答问题,是的,我知道我可以简单地将数据作为文件加载并在然而,在我的应用程序中,我需要首先将CSV读入内存,然后创建数据结构,这样我就不能真正使用许多用于使用LoadFromTextFile方法读入CSV文件的示例。有人能为我如何设置动态内存集合并将其转换为IDataView提供支持吗反对