KerasRegressor测定系数R ^ 2得分

时间:2017-07-22 02:35:34

标签: python tensorflow scikit-learn keras tensor

我正在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)

这看起来有效,因为没有任何错误和指标随着时间的推移逐渐增加,但我想确定我已正确实施指标。我是Keras后端功能的新手。

1 个答案:

答案 0 :(得分:7)

您可以查看this post。我测试了以下代码,它可以满足您的需要。

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()) )