2017-11-11 4 views
0

私は角度を予測するモデルで作業しています。近い角度を同様に扱うようにターゲットを変換するには良い方法はありますか(現在は0〜360度の値をとります)。私は360と0に近い値が似ているが、まったく異なる大きさを持っているので、今は最適ではないので、それらを残していると思う。同様に1度と359度が処理されるようなターゲットデータ(角度/度)の変換

答えて

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 
関連する問題