0
我正在研究預測角度的模型。什麼是改變目標的好方法(目前它們取值0到360度),這樣近似角度的處理方式相似嗎?我懷疑現在離開它們並不是最佳的,因爲接近360和0的值是相似的,但是具有完全不同的大小。轉換目標數據(角度/度),使1度和359度得到相似處理
我正在研究預測角度的模型。什麼是改變目標的好方法(目前它們取值0到360度),這樣近似角度的處理方式相似嗎?我懷疑現在離開它們並不是最佳的,因爲接近360和0的值是相似的,但是具有完全不同的大小。轉換目標數據(角度/度),使1度和359度得到相似處理
你可以對它們使用正弦和餘弦變換!當然,你的模型不會完美地預測它們,所以你需要在預測後重新標準化你的結果。請參閱示例代碼:
# 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