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