转换目标数据(角度/度),以便以类似的方式处理 1 度和 359 度



我正在研究一个预测角度的模型。转换目标(目前它们的值为 0 到 360 度(以使近距离角度得到类似处理的好方法是什么?我怀疑让它们保持现在的状态并不是最佳的,因为接近 360 和 0 的值是相似的,但具有完全不同的幅度。

您可以对它们使用正弦和余弦变换!当然,您的模型不会完美地预测它们,因此您需要在预测后重新规范化结果。请参阅示例代码:

# predicting the angle (in radians)
import numpy as np
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import r2_score
# generate toy data
np.random.seed(1)
X = np.random.normal(size=(100, 2))
y = np.arctan2(np.dot(X, [1,2]), np.dot(X, [3,0.4]))
# simple prediction
model = MLPRegressor(random_state=42, activation='tanh', max_iter=10000)
y_simple_pred = cross_val_predict(model, X, y)
# transformed prediction
joint = cross_val_predict(model, X, np.column_stack([np.sin(y), np.cos(y)]))
y_trig_pred = np.arctan2(joint[:,0], joint[:,1])
# compare
print(r2_score(y, y_simple_pred)) # R^2 about 0.53
print(r2_score(y, y_trig_pred))   # R^2 about 0.85

最新更新