【问题标题】:KerasRegressor Coefficient of Determination R^2 ScoreKerasRegressor 确定系数 R^2 分数
【发布时间】:2017-12-28 05:45:18
【问题描述】:

我正在 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 后端函数的新手。

【问题讨论】:

  • 直接使用r2_score
  • 这些是张量,所以最好使用 keras 函数
  • 我是深度学习新手,不太了解如何/从何处获取 metrics=[det_coeff] 结果。它不会被打印出来。,如何在我的代码中修改你的以下以获得 det_coeff 的值:estimator = KerasRegressor(build_fn=start_model, epochs=100, batch_size=5, verbose=0) kfold = KFold(n_splits=10) results = cross_val_score(estimator, X, y, cv=kfold) print("基线: %.2f (%.2f) MSE" % (results.mean(), results.std()))

标签: python tensorflow scikit-learn keras tensor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 2016-05-22
    • 2022-01-03
    • 2020-09-16
    • 2021-02-10
    • 2014-07-26
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多