KerasRegressor 决定系数 R^2 分数
KerasRegressor Coefficient of Determination R^2 Score
我正在 Keras 中构建一个用于回归任务的小型神经网络,我想使用与 scikit-learn 相同的准确度指标 RandomForestRegressor:
The coefficient R^2 is defined as (1 - u/v), where u is the regression sum of squares ((y_true - y_pred) ** 2).sum() and v is the residual sum of squares ((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 后端函数的新手。
您可以查看 this post。我测试了以下代码,它可以正常工作。
from keras import backend as K
def coeff_determination(y_true, y_pred):
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()) )
我正在 Keras 中构建一个用于回归任务的小型神经网络,我想使用与 scikit-learn 相同的准确度指标 RandomForestRegressor:
The coefficient R^2 is defined as (1 - u/v), where u is the regression sum of squares ((y_true - y_pred) ** 2).sum() and v is the residual sum of squares ((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 后端函数的新手。
您可以查看 this post。我测试了以下代码,它可以正常工作。
from keras import backend as K
def coeff_determination(y_true, y_pred):
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()) )