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