web-dev-qa-db-ja.com

KerasRegressor決定係数R ^ 2スコア

Kerasで回帰タスク用の小さなニューラルネットを構築しています。scikit-learn RandomForestRegressor と同じ精度メトリックを使用したいと思います。

係数R ^ 2は(1-u/v)として定義されます。ここで、uは回帰二乗和((y_true-y_pred)** 2).sum()であり、vは残差二乗和((y_true- y_true.mean())** 2).sum()。

1.0までの値を表示するため、便利なメトリックです(分類のパーセント精度と同様)。 Kerasバックエンドの使用法は、必要な精度メトリックに対して正しいですか?

def create_model():
    model = Sequential()
    model.add(Dense(10,
                input_dim=X.shape[1],
                activation="relu"))
    model.add(Dense(10,
                activation="relu"))
    model.add(Dense(1))

    # Compile model
    model.compile(loss="mean_squared_error", optimizer="adam", metrics=[det_coeff])
    return model

# Is this computing the right thing?
def det_coeff(y_true, y_pred):
    u = K.sum(K.square(y_true - y_pred))
    v = K.sum(K.square(y_true - K.mean(y_true)))
    return K.ones_like(v) - (u / v)

これはエラーがなく、時間の経過とともにメトリックが1に向かって増加しているように見えますが、メトリックを正しく実装したことを確認します。 Kerasバックエンド関数は初めてです。

9
Nick

あなたはチェックすることができます この投稿 アウト。私は次のコードをテストしましたが、それはあなたの目的のために大丈夫です。

from keras import backend as K

def coeff_determination(y_true, y_pred):
    from keras import backend as K
    SS_res =  K.sum(K.square( y_true-y_pred ))
    SS_tot = K.sum(K.square( y_true - K.mean(y_true) ) )
    return ( 1 - SS_res/(SS_tot + K.epsilon()) )
13
Mingfei Sun