Я знаю, что у меня есть чтобы:
- Поместить мои данные в DataView
- Разделить данные для обучения и тестирования
- Создайте конвейер (здесь нужна помощь)
- Обучите модель
- Сохраните и оцените ее
Код: Выделить всё
internal class Frame
{
[LoadColumn(0), ColumnName("Label")] public string Label { get; set; }
[LoadColumn(1, 302), VectorType(302)] public float[] Features { get; set; }
}
Код: Выделить всё
internal class OutcomePrediction
{
[ColumnName("PredictedLabel")] public string PredictedLabel { get; set; }
}
Мне трудно понять, где использовать преобразования ключ/значение.
В настоящее время мое понимание очень расплывчато.
Я зашел так далеко прямо сейчас. По сути, я пытался следовать документации:
https://learn.microsoft.com/en-us/dotne ... ata-ml-net
https://learn.microsoft.com/en-us/dotne ... del-ml-net
Код: Выделить всё
private const string DIR = @"C:\Users\\Desktop\Sample";
private static readonly DirectoryInfo directory = new(DIR);
private static readonly MLContext mlContext = new(seed: 0);
static void Main(string[] args)
{
// §0 Load from files (probably ok)
TextLoader textLoader = mlContext.Data.CreateTextLoader(separatorChar: ',', hasHeader: true);
IDataView data = textLoader.Load(directory.GetFiles().Select(file => file.FullName).ToArray());
// §1 Split Data (probably ok)
TrainTestData dataSplit = mlContext.Data.TrainTestSplit(data, testFraction: 0.2);
IDataView trainData = dataSplit.TrainSet;
IDataView testData = dataSplit.TestSet;
// §2 My try at parsing the data (probably faulty)
EstimatorChain dataPrepEstimator =
mlContext.Transforms.Concatenate("Features", "Features")
.Append(mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "LabelKey", inputColumnName: "Label"))
.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "LabelKey"));
// §3 The transformer, even though I dont really need to transform anything but the "Label" (into a key)
// throws System.ArgumentOutOfRangeException:
// 'Schema mismatch for label column 'LabelKey': expected Single, got Key Arg_ParamName_Name'
TransformerChain dataPrepTransformer =
dataPrepEstimator.Fit(trainData);
// §4 Not sure if this is needed
IDataView transformedTrainingData = dataPrepTransformer.Transform(trainData);
// §5 Trainer (probably ok)
SdcaRegressionTrainer sdcaEstimator = mlContext.Regression.Trainers.Sdca();
// §6 Training (maybe ok)
RegressionPredictionTransformer trainedModel =
sdcaEstimator.Fit(transformedTrainingData);
LinearRegressionModelParameters trainedModelParameters = trainedModel.Model;
// §7 Testing (probably ok)
IDataView transformedTestData = dataPrepTransformer.Transform(testData);
IDataView testDataPredictions = trainedModel.Transform(transformedTestData);
RegressionMetrics trainedModelMetrics = mlContext.Regression.Evaluate(testDataPredictions);
double rSquared = trainedModelMetrics.RSquared;
Console.WriteLine($"r²: {rSquared}");
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... lized-data