首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在keras神经网络管道中添加一个sklearn目标变压器(用于输出变量)?

如何在keras神经网络管道中添加一个sklearn目标变压器(用于输出变量)?
EN

Stack Overflow用户
提问于 2020-04-28 19:07:49
回答 1查看 570关注 0票数 1

我想用Keras来构建一个神经网络,它可以转换我的输入变量和输出变量(这样我就可以执行CV了)。我正在尝试使用TransformedTargetRegressor,但是我的均方错误对我来说没有意义。

这是我的代码,它改编自Sklearn的TransformedTargetRegressor示例,使用波士顿房屋数据集,并添加了一个简单的神经网络来扩展输入变量(X)。

设置(本节很好):

代码语言:javascript
运行
复制
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)

我正在尝试执行以下操作(有问题的部分):

代码语言:javascript
运行
复制
#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的均方误差似乎是错误的。我在这里做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-29 12:54:31

均方误差是平方的,因此不可能是负的。这意味着你的分数不是均方误差。

得分文档告诉我们,如果没有定义,scorer默认为估值器记分器:

“如果没有,则使用估计器的默认记分器(如果可用)。

在您的例子中,正在使用的是TransformedTargetRegressor回归器。TransformedTargetRegressor文档告诉我们它的默认分数:

返回预测的决定系数R^2。

所以你要显示的值是R2分数。如果你的模型表现不好,它可能是负面的。例如,请看这个问题。

作为一个良好的实践,你应该始终定义你想要使用的得分手,以避免依赖错误的一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61488045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档