ML.NET中的R2得分和RMS损失-我训练模型的方式是否存在问题,还是存在于我的数据上?

时间:2019-04-10 12:41:23

标签: c# ml.net

我在ML.NET中是个新手。现在,我只是简单地复制代码,然后从此处ML.NET Tutorial Taxi Fare粘贴代码。但是,我使用的是1996年至今的BMW.DE历史股价,而不是使用给定的CSV文件。我是从这里Finance Yahoo获得的。

我的目标是在第二天预测“开盘” 的值。

我的BWM.DE.csv文件中的示例数据:

    Date,Open
    12/19/1996,20.0
    12/20/1996,20.3
    12/23/1996,20.6
    12/27/1996,20.8
    12/30/1996,20.9
    1/2/1997,20.7
    1/3/1997,20.8
    1/6/1997,20.9
    1/7/1997,20.6

我的宝马班

    public class BmwOpenClass
    {
        [LoadColumn(0)]
        public string Date;

        [LoadColumn(1)]
        public float Open;
    }

    public class PredictedOpen
    {
        [ColumnName("Score")]
        public float Open;
    }

这就是我的训练方式

public static ITransformer Train(MLContext mlContext, string dataPath)
        {
            IDataView dataView = mlContext.Data.LoadFromTextFile<BmwOpenClass>(dataPath, hasHeader: true, separatorChar: ',');

            var pipeline = mlContext.Transforms.CopyColumns(outputColumnName: "Label", inputColumnName: "Open")
                .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "DateEncoded", inputColumnName: "Date"))
                .Append(mlContext.Transforms.Concatenate("Features", "DateEncoded"))
                .Append(mlContext.Regression.Trainers.FastTree());

            var model = pipeline.Fit(dataView);

            SaveModelAsFile(mlContext, model);

            return model;
        }

现在,当我尝试评估模型时(出于评估目的,我有一个单独的CSV文件),我得到的模型质量为:

R2得分:-2.57

RMS损失:59.94

我很确定-2.57是不正常的,因为根据文档,R2应该更接近1才能表明模型是好的。

1 个答案:

答案 0 :(得分:2)

我不确定使用OneHotEncoding对您的Date列是个好主意。整个日期日期/月份/年份不是分类值。如果将日,月,年分成不同的列,则可能会比分别编码它们更好。另外,仅Date不是一个很好的功能,这就是为什么该模型可能不是一个好的功能。尝试通过在一周中的某天添加一列来扩充数据集,无论是否是假期,都应该做得更好。最终,要获得更好的模型,您需要更多功能...