keras - 如何在 VotingRegressor 中添加具有 ML 模型的神经网络模型?

标签 keras regression valueerror ensemble-learning voting

问题背景

我尝试将 KerasRegressor 模型与 ML 模型(例如 Lasso、Gradient Boost Regressor)结合使用,以构建集成方法。我使用 sklearn 的 VotingRegressor() 函数对模型进行分组。但是,当我在 VotingRegressor() 中添加 KerasRegressor 模型时,出现以下错误。

ValueError: The estimator KerasRegressor should be a regressor.

我是如何尝试解决这个问题的?

我在google上搜索了错误,只找到了this page我在哪里找不到解决方案。此外,我试图理解 document KerasRegressor 的。但是,我不知道为什么会收到错误,因为文档说它是 Keras 的 scikit-learn 回归器 API 的实现

那么,我的问题

为什么我会收到此错误以及如何解决该错误?

任何帮助将不胜感激:)。谢谢!

最佳答案

从此issue使用 keras 没有解决方案,因为 sklearn 包装器未维护并将被删除

幸运的是scikeras包解决了这个问题。

我建议您阅读文档或 tutorials但这里有一个使用子类化的简单示例:

!pip install scikeras

import scikeras
from tensorflow import keras
from sklearn.datasets import make_regression
from sklearn.ensemble import VotingRegressor
from sklearn.linear_model import LinearRegression

class MLPRegressor(KerasRegressor):

    def __init__(
        self,
        hidden_layer_sizes=(100, ),
        optimizer="adam",
        optimizer__learning_rate=0.001,
        epochs=10,
        verbose=0,
        **kwargs,
    ):
        super().__init__(**kwargs)
        self.hidden_layer_sizes = hidden_layer_sizes
        self.optimizer = optimizer
        self.epochs = epochs
        self.verbose = verbose

    def _keras_build_fn(self, compile_kwargs):
        model = keras.Sequential()
        inp = keras.layers.Input(shape=(self.n_features_in_))
        model.add(inp)
        for hidden_layer_size in self.hidden_layer_sizes:
            layer = keras.layers.Dense(hidden_layer_size, activation="relu")
            model.add(layer)
        out = keras.layers.Dense(1)
        model.add(out)
        model.compile(loss="mse", optimizer=compile_kwargs["optimizer"])
        return model

# simple linear regression
r1 = LinearRegression()
# keras model wrapper
r2= MLPRegressor(epochs=20)  


X = (y/2).reshape(-1, 1)
y = np.arange(100)

#defining votting classifier
vr = VotingRegressor([('lr', r1), ('MLPReg', r2)])

vr.fit(X,y)

VotingRegressor(estimators=[('lr', LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)), ('MLPReg', MLPRegressor(batch_size=None, build_fn=None, callbacks=None, epochs=20, hidden_layer_sizes=(100,), loss=None, metrics=None, model=None, optimizer='adam', random_state=None, run_eagerly=False, shuffle=True, validation_batch_size=None, validation_split=0.0, verbose=0, warm_start=False))], n_jobs=None, weights=None)

关于keras - 如何在 VotingRegressor 中添加具有 ML 模型的神经网络模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67041578/

相关文章:

python-3.x - 考虑到 pandas 系列中的不同索引,如何正确估计两列的百分比变化? Python相关

python - 在 Keras 上使用回调 Tensorboard 时出现 AttributeError : 'Model' object has no attribute 'run_eagerly'

python - 将预测映射回 ID - Python Scikit Learn DecisionTreeClassifier

tensorflow - tf.dataset、多个路径输入以及每批映射以加载图像

r - 如何对值上具有相同日期的所有行进行回归?

machine-learning - 测量 SVM 中模型的准确性和特征的重要性

r - 如何在 R 回归公式中使用变量?

python - 警告 :tensorflow:Model was constructed with shape (None, ....)

keras - 对如何实现时间分布的 LSTM + LSTM 感到困惑

即使有验证数据,Tensorflow 2.0 Keras 也不会保存最佳模型,仍然给我 : Can save best model only with val_acc available, 跳过