KerasRegressor测定系数R ^ 2得分

Nic*_*ick 6 python scikit-learn keras tensorflow 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)
Run Code Online (Sandbox Code Playgroud)

这看起来有效,因为没有任何错误和度量标准随着时间的推移逐渐增加,但我想确定我已经正确地实现了度量标准.我是Keras后端功能的新手.

小智 13

你可以查看这篇文章.我测试了以下代码,它可以满足您的需要.

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()) )
Run Code Online (Sandbox Code Playgroud)