Футбольный прогноз ML.Net дает неверные результаты - PullRequest
0 голосов
/ 31 октября 2019

У меня есть следующий код в ML.NET, который читает исторические шансы и результаты футбольных матчей и пытается предсказать результат на основе пройденных шансов, но прогноз неутешителен, и каждый раз он дает другой прогноз, даже если я использую те же самые данные,

public ResultPrediction Start()
{
    var dbData = matchDetailsRepository.GetOdds(string.Empty);
    if (dbData.Count == 0)
        return null;

    //Create ML Context with seed for repeteable/deterministic results
    MLContext mlContext = new MLContext(seed: 0);

    IDataView data = mlContext.Data.LoadFromEnumerable<FullTimeOddsData>(dbData.ToFullTimeOddsDataList());

    var pipeline = mlContext.Transforms.CopyColumns(outputColumnName: "Label", inputColumnName: "Result")
                        .Append(mlContext.Transforms.Concatenate("Features", "HomeWinOdd", "DrawOdd", "AwayWinOdd"));

    // Define StochasticDualCoordinateAscent regression algorithm estimator
    var sdcaEstimator = pipeline.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Label", featureColumnName: "Features"));

    // Build machine learning model
    TransformerChain<RegressionPredictionTransformer<LinearRegressionModelParameters>> trainedModel = sdcaEstimator.Fit(data);

    // Create PredictionEngines
    PredictionEngine<FullTimeOddsData, ResultPrediction> predictionEngine = mlContext.Model.CreatePredictionEngine<FullTimeOddsData, ResultPrediction>(trainedModel);

    // Input Data
    FullTimeOddsData inputData = new FullTimeOddsData
    {
        HomeWinOdd = 19F,
        DrawOdd = 10F,
        AwayWinOdd = 1.14F,
    };

    // Get Prediction
    ResultPrediction prediction = predictionEngine.Predict(inputData);

    return prediction;
}

public class ResultPrediction
{
    [ColumnName("Score")]
    public float Prediction;
}

public class FullTimeOddsData
{
    public float HomeWinOdd;

    public float DrawOdd;

    public float AwayWinOdd;

    public float Result;
}

В чем здесь проблема, которая дает другой прогноз, используя одни и те же данные, и что я делаю неправильно, чтобы дать неправильный прогноз. На основе входных данных прогноз должен составлять 1 или около 1

Пример данных ниже:

HomeWinOdd,DrawOdd,AwayWinOdd,Result
2.2,3.5,2.5,2
2,3,2.9,2
2.05,3.4,2.95,2
2,3.4,2.9,2
2,3.6,2.65,3
2.1,3,2.8,3
2.3,3.4,2.55,3
2.4,3.3,2.4,3
2.3,3.3,2.45,3
2.35,3,2.35,3
2.45,3.4,2.4,3
2.4,3.3,2.4,3
1.9,3.3,3.5,1
1.8,3,3.5,1
1.85,3.4,3.5,1
1.41,4.1,4.7,1
1.75,3.1,3.6,1
1.6,3.5,4.5,1
1.61,3.6,4.2,1

Result = 1 means Home wins
Result = 2 means Away wins
Result = 3 means Draw
...