Итак, я бы хотел вычислить R2 = 1 - residual_ss/y_ss
после кераса.Я использовал прогноз model.predict()
для вычисления residual_ss
.Тем не менее, residual_ss
намного больше, чем y_ss
, что приводит к отрицательному значению R2
.Так как residual_ss = n*mse
и mse
также являются функцией потерь, код показывает вычисление для mse
после модели:
import keras
keras.__version__
from keras.datasets import boston_housing
import pandas as pd
import numpy as np
(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
mean = train_data.mean(axis=0)
train_data -= mean
std = train_data.std(axis=0)
train_data /= std
test_data -= mean
test_data /= std
from keras import models
from keras import layers
def build_model():
# Because we will need to instantiate
# the same model multiple times,
# we use a function to construct it.
model = models.Sequential()
model.add(layers.Dense(64, activation='relu',
input_shape=(train_data.shape[1],)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1))
model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])
return model
model=build_model()
model.fit(train_data, train_targets, epochs=200, batch_size=32)
#try to get mse
y_pred = model.predict(train_data)
mse=np.mean((train_targets-y_pred)*(train_targets-y_pred))
print(mse)
Вот последние 3 эпохи и mse
в конце
Epoch 198/200
404/404 [=======] - 0s 17us/step - loss: 3.4695 - mean_absolute_error: 1.3338
Epoch 199/200
404/404 [=======] - 0s 22us/step - loss: 3.5412 - mean_absolute_error: 1.3260
Epoch 200/200
404/404 [=======] - 0s 20us/step - loss: 3.2775 - mean_absolute_error: 1.2858
162.25934358457062
Я использую только train_data
и train_targets
здесь.Почему я получил mse
, даже не близкий к потере (mse
), зарегистрированной в каждой эпохе?Так что прогноз не близок к цели.Пожалуйста, помогите.