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],

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?



Browse other questions tagged or ask your own question.