Please kindly provide some advice on maximizing regression accuracy with a circular target, in this case, angles between 0 and 2pi.
The training set has the shape (14585110, 6).
The angle information is encoded with [sin, cos] (double target), but I am stuck with an average angle error of about 70º in the prediction, possibly because I failed to use a periodic model.
MAE: 102.026772
RMSE: 138.321289
R^2: -0.718614
ANGLE LOSS: 75.296860
The current model is:
pipe_model = Pipeline([
('feature_scaling', StandardScaler()),
('reg', xgb.sklearn.XGBRegressor(n_jobs=4))
])
grid_param = [{
'reg__min_child_weight':[0.5, 0.6, 0.7],
'reg__max_depth':[20, 30, 40],
'reg__n_estimators':[80, 90, 100],
'reg__alpha':[10],
'reg__verbosity':[1],
}]
model = RandomizedSearchCV(pipe_model, grid_param,
n_jobs=4, n_iter=5, cv=3,
scoring='neg_mean_squared_error', verbose=1)
model_ft = MultiOutputRegressor(model, n_jobs=8).fit(X, Y)
Some images to help visualize the problem:
Histogram of Delta Angle (|Predicted - Real|)
Scatter Plot of Real X Predicted
Could you please point to any metrics or changes that can be applied to a periodic model?
circular-statistics
that might also be helpful. $\endgroup$