我正在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后端功能的新手。
答案 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()) )