ML. NET поддерживает загрузку нескольких наборов данных в один IDataView
, используя класс MultiFileSource
:
var loader = mCont.Data.LoadFromTextFile<Analog>(separatorChar: ',', hasHeader: false);
IDataView data = loader.Load(new MultiFileSource("myYesSignalData.csv", "myNoSignalData.csv"));
Однако в настоящее время я не вижу способа сообщить тренеру, какой примеры положительные и отрицательные, кроме добавления столбца метки в оба файла: в файле «да» добавьте столбец «все единицы» и в файле «нет» добавьте столбец «все нули». Затем определите класс Analog
следующим образом:
public class Analog
{
[LoadColumn(0, Global.SAMPLE_SIZE - 1)]
[VectorType(Global.SAMPLE_SIZE)]
public float[] DiscreteSignal { get; set; }
[LoadColumn(Global.SAMPLE_SIZE)]
public float Label { get; set; }
}
Добавление столбца метки можно выполнить с помощью простой программы C#, например:
public class AnalogNoLabel
{
[LoadColumn(0, Global.SAMPLE_SIZE - 1)]
[VectorType(Global.SAMPLE_SIZE)]
public float[] DiscreteSignal { get; set; }
}
public void AddLabel(MLContext mCont)
{
IDataView data = mCont.Data.LoadFromTextFile<AnalogNoLabel>("myYesSignalData.csv", separatorChar: ',', hasHeader: false);
var pipeline = mCont.Transforms.CustomMapping<AnalogNoLabel, Analog>((input, output) => {
output.DiscreteSignal = input.DiscreteSignal;
output.Label = 1;
}, contractName: null);
IDataView dataWithLabel = pipeline.Fit(data).Transform(data);
using (var stream = new FileStream("myNewYesSignalData.txt", FileMode.Create))
mCont.Data.SaveAsText(dataWithLabel, stream);
}
и аналогичной. скрипт для "myNoSignalData.csv" с output.Label = 0
вместо output.Label = 1
.