[英]How do i predict and print out the r2 score for an ann model using keras?
我想比較 2 個模型的 r2(r 平方)值,以確定哪個模型的預測准確度更高。 這兩個模型是隨機森林和人工神經網絡(使用 keras)。 我已經成功地獲得了我的隨機森林算法的值,但我似乎無法弄清楚這一點來預測並打印出我的 ANN 算法的正確值。 我的數據集是石油生產工作的 2,421 行和 13 列。 看看我到目前為止做了什么:
# Initialize the constructor
model = Sequential()
# Specifying input layer
model.add(Dense(2000, input_shape=(13,)))
# Add an first hidden layer
model.add(Dense(1500, activation='relu'))
model.add(Dropout(0.2))
# second hidden layer
model.add(Dense(1000, activation='relu'))
# third hidden layer
model.add(Dense(500, activation='relu'))
# Add an output layer with one neuron and no activation specified
model.add(Dense(1))
from keras import backend as K
def r2_score(y_test, y_pred):
SS_res = K.sum(K.square( y_test-y_pred ))
SS_tot = K.sum(K.square( y_test - K.mean(y_test) ) )
return ( 1 - SS_res/(SS_tot + K.epsilon()) )
model.compile(loss='mean_squared_error',
optimizer='adam' , metrics = ['mae', 'mse', r2_score])
epochs = 50
history = model.fit(X_train, y_train, epochs=epochs, batch_size=200, validation_split=0.3)
pred_train= model.predict(X_train)
print(K.get_value(r2_score(K.constant(y_train),pred_train)))
pred= model.predict(X_test)
print(K.get_value(r2_score(K.constant(y_test),pred)))
我得到了一個輸出
-3170.0261
-1360.6658
我究竟做錯了什么?
你的實現看起來不錯。 對於不良模型,R^2 可能為負數。 根據sckit 文檔:
最好的分數是 1.0,它可以是負數(因為模型可以任意變壞)。
請注意,您的定義與sklearn.metrics.r2_score
中使用的定義幾乎相同,除了 epsilon (他們在文檔和代碼中都沒有提到 epsilon),因此您只需刪除它即可使兩者相等:
def r2_score(y_test, y_pred):
SS_res = K.sum(K.square( y_test-y_pred ))
SS_tot = K.sum(K.square( y_test - K.mean(y_test) ) )
return ( 1 - SS_res/(SS_tot) )
現在兩種實現的輸出應該是相同的:
from sklearn.metrics import r2_score as r2_score_sk
pred = model.predict(X_test)
# current result
print(K.get_value(r2_score(K.constant(y_test), pred)))
# expected one
print(r2_score_sk(y_test, pred)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.