簡體   English   中英

如何使用 keras 預測和打印 ann 模型的 r2 分數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM