Я хочу построить нейронную сеть, используя Keras на преобразованиях моих входных переменных И моих выходных переменных, используя конвейер sklearn (чтобы я мог выполнять CV). Я пытаюсь использовать TransformedTargetRegressor, но мои среднеквадратические ошибки не имеют для меня смысла.
Это мой код, который адаптирован из примера Склеарна для TransformedTargetRegressor с использованием набора данных Boston Housing и добавления простой нейронной сети, которая масштабируется входные переменные (X).
Настройка (этот раздел подходит):
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler
from sklearn.datasets import load_boston
from sklearn.compose import TransformedTargetRegressor
from sklearn.model_selection import train_test_split
#load data
X, y = load_boston(return_X_y=True)
#define simple neural network
def simple_nn():
model = Sequential()
model.add(Dense(13, input_dim=13, activation='relu'))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer = 'adam')
return model
#create pipeline for input variables (X) preprocessing
estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('mlp', KerasRegressor(build_fn=simple_nn, epochs=100, batch_size=5, verbose=True)))
pipeline = Pipeline(estimators)
Я пытаюсь сделать следующее (раздел в вопрос):
#Section in question
transformer = MinMaxScaler()
model = TransformedTargetRegressor(regressor=pipeline,
transformer=transformer)
results = cross_val_score(model, X, y, cv=KFold(n_splits=5))
Полученные результаты перекрестной проверки: array([ 0.61321517, 0.35811762, -2.67674546, -0.30623006, -0.38187424])
Среднее число представляет особый интерес для меня, поскольку предполагается, что цель y масштабирована от 0 до 1, поэтому среднеквадратическая ошибка -2,67 кажется неправильной. Что я здесь не так делаю?