我实际上完成了ML.NET的所有Microsoft教程,现在想构建自己的模型。我想将string[][] data
转换为IDataView-Object
,因为我想在ML.NET模型中使用它进行二进制分类。
到目前为止,我一直使用外部文本或CSV文件中的数据进行培训。现在,我要使用存储在string[][] data
中的数据。在data[0][]
中是文本值,在data[1][]
中是boolean
值。
我无法将现有的嵌套数组转换为IDataView object
。我已经尝试使用以下代码:
public class BinaryData
{
public string Text { get; set; }
public bool Label { get; set; }
}
// The data is collected from an Excel-Table with some functions and saved in this nested array:
string[][] data = form.GetDataSelection().GetDataContainer().textCols;
BinaryData[] inMemoryCollection = new BinaryData[data[0].Length];
for (int i = 0; i < data[0].Length-1; i++)
{
inMemoryCollection[i] = new BinaryData
{
Text = data[0][i],
Label = Convert.ToBoolean(Convert.ToInt64(data[1][i]))
};
}
IDataView dataView = mlContext.Data.LoadFromEnumerable<BinaryData>(inMemoryCollection);
我的实现基于tutorial from Microsoft。
在我要使用Fit()-Method
之前它一直有效。我收到以下错误消息:
System.InvalidOperationException:'拆分器/合并器工作程序 消费源数据时遇到异常”
我希望有人可以在这里帮助我。提前非常感谢!
答案 0 :(得分:0)
它与two-dimensional array [,]
一起使用。我使用Method from this post 将jagged array [][]
转换为二维数组,并稍微修改了代码:
string[][] data_jagged = form.GetDataSelection().GetDataContainer().textCols;
string[,] data = To2D(data_jagged);
BinaryData[] inMemoryCollection = new BinaryData[data_jagged[0].Length];
for (int i = 0; i < data_jagged[0].Length; i++)
{
inMemoryCollection[i] = new BinaryData
{
Text = data[0,i],
Label = Convert.ToBoolean(Convert.ToInt64(data[1,i]))
};
}
IDataView dataView = mlContext.Data.LoadFromEnumerable<BinaryData>(inMemoryCollection);
感谢Eric的帮助。