Keras 3 API 文档 / 工具集 / Scikit-Learn API 包装器

Scikit-Learn API 包装器

[源代码]

SKLearnClassifier

keras.wrappers.SKLearnClassifier(
    model, warm_start=False, model_kwargs=None, fit_kwargs=None
)

Keras 模型兼容 scikit-learn 的分类器包装器。

请注意,模型初始化和训练中存在随机性来源。请参阅Keras 模型的可复现性以了解如何控制随机性。

参数

  • model: Model。一个 Model 实例,或一个返回此类对象的 callable。请注意,如果输入是一个 Model,除非设置了 warm_start=True,否则在拟合之前会使用 keras.models.clone_model 克隆它。传递的 Model 实例需要是已经编译好的。如果传递的是 callable,它必须至少接受 Xy 作为关键字参数。如果用户通过 model_kwargs 传递了其他参数,callable 也必须接受这些参数。
  • warm_start: bool,默认为 False。是否重用上次拟合的模型权重。如果设置为 True,则不会克隆给定的模型,并且将重用上次拟合的权重。
  • model_kwargs: dict,默认为 None。如果 model 是 callable,则传递给 model 的关键字参数。
  • fit_kwargs: dict,默认为 None。传递给 model.fit 的关键字参数。这些参数也可以直接传递给 scikit-learn 包装器的 fit 方法。直接传递给 fit 方法的值将优先于此处设置的值。

属性

  • model_ : Model 拟合好的模型。
  • history_ : dict 拟合历史记录,由 model.fit 返回。
  • classes_ : array-like,形状=(n_classes,) 类别标签。

示例

这里我们使用一个函数来创建基本的 MLP 模型,该函数动态选择输入和输出形状。我们将使用此函数来创建我们的 scikit-learn 模型。

from keras.src.layers import Dense, Input, Model

def dynamic_model(X, y, loss, layers=[10]):
    # Creates a basic MLP model dynamically choosing the input and
    # output shapes.
    n_features_in = X.shape[1]
    inp = Input(shape=(n_features_in,))

    hidden = inp
    for layer_size in layers:
        hidden = Dense(layer_size, activation="relu")(hidden)

    n_outputs = y.shape[1] if len(y.shape) > 1 else 1
    out = [Dense(n_outputs, activation="softmax")(hidden)]
    model = Model(inp, out)
    model.compile(loss=loss, optimizer="rmsprop")

    return model

然后您可以使用此函数创建一个 scikit-learn 兼容的模型,并在一些数据上进行拟合。

from sklearn.datasets import make_classification
from keras.wrappers import SKLearnClassifier

X, y = make_classification(n_samples=1000, n_features=10, n_classes=3)
est = SKLearnClassifier(
    model=dynamic_model,
    model_kwargs={
        "loss": "categorical_crossentropy",
        "layers": [20, 20, 20],
    },
)

est.fit(X, y, epochs=5)

[源代码]

SKLearnRegressor

keras.wrappers.SKLearnRegressor(
    model, warm_start=False, model_kwargs=None, fit_kwargs=None
)

Keras 模型兼容 scikit-learn 的回归器包装器。

请注意,模型初始化和训练中存在随机性来源。请参阅Keras 模型的可复现性以了解如何控制随机性。

参数

  • model: Model。一个 Model 实例,或一个返回此类对象的 callable。请注意,如果输入是一个 Model,除非设置了 warm_start=True,否则在拟合之前会使用 keras.models.clone_model 克隆它。传递的 Model 实例需要是已经编译好的。如果传递的是 callable,它必须至少接受 Xy 作为关键字参数。如果用户通过 model_kwargs 传递了其他参数,callable 也必须接受这些参数。
  • warm_start: bool,默认为 False。是否重用上次拟合的模型权重。如果设置为 True,则不会克隆给定的模型,并且将重用上次拟合的权重。
  • model_kwargs: dict,默认为 None。如果 model 是 callable,则传递给 model 的关键字参数。
  • fit_kwargs: dict,默认为 None。传递给 model.fit 的关键字参数。这些参数也可以直接传递给 scikit-learn 包装器的 fit 方法。直接传递给 fit 方法的值将优先于此处设置的值。

属性

  • model_ : Model 拟合好的模型。

示例

这里我们使用一个函数来创建基本的 MLP 模型,该函数动态选择输入和输出形状。我们将使用此函数来创建我们的 scikit-learn 模型。

from keras.src.layers import Dense, Input, Model

def dynamic_model(X, y, loss, layers=[10]):
    # Creates a basic MLP model dynamically choosing the input and
    # output shapes.
    n_features_in = X.shape[1]
    inp = Input(shape=(n_features_in,))

    hidden = inp
    for layer_size in layers:
        hidden = Dense(layer_size, activation="relu")(hidden)

    n_outputs = y.shape[1] if len(y.shape) > 1 else 1
    out = [Dense(n_outputs, activation="softmax")(hidden)]
    model = Model(inp, out)
    model.compile(loss=loss, optimizer="rmsprop")

    return model

然后您可以使用此函数创建一个 scikit-learn 兼容的模型,并在一些数据上进行拟合。

from sklearn.datasets import make_regression
from keras.wrappers import SKLearnRegressor

X, y = make_regression(n_samples=1000, n_features=10)
est = SKLearnRegressor(
    model=dynamic_model,
    model_kwargs={
        "loss": "mse",
        "layers": [20, 20, 20],
    },
)

est.fit(X, y, epochs=5)

[源代码]

SKLearnTransformer

keras.wrappers.SKLearnTransformer(
    model, warm_start=False, model_kwargs=None, fit_kwargs=None
)

Keras 模型兼容 scikit-learn 的 Transformer 包装器。

请注意,这是一个 scikit-learn 兼容的 Transformer,而不是深度学习意义上的 Transformer。

另请注意,模型初始化和训练中存在随机性来源。请参阅Keras 模型的可复现性以了解如何控制随机性。

参数

  • model: Model。一个 Model 实例,或一个返回此类对象的 callable。请注意,如果输入是一个 Model,除非设置了 warm_start=True,否则在拟合之前会使用 keras.models.clone_model 克隆它。传递的 Model 实例需要是已经编译好的。如果传递的是 callable,它必须至少接受 Xy 作为关键字参数。如果用户通过 model_kwargs 传递了其他参数,callable 也必须接受这些参数。
  • warm_start: bool,默认为 False。是否重用上次拟合的模型权重。如果设置为 True,则不会克隆给定的模型,并且将重用上次拟合的权重。
  • model_kwargs: dict,默认为 None。如果 model 是 callable,则传递给 model 的关键字参数。
  • fit_kwargs: dict,默认为 None。传递给 model.fit 的关键字参数。这些参数也可以直接传递给 scikit-learn 包装器的 fit 方法。直接传递给 fit 方法的值将优先于此处设置的值。

属性

  • model_ : Model 拟合好的模型。
  • history_ : dict 拟合历史记录,由 model.fit 返回。

示例

scikit-learn Transformer 的一个常见用例是,其中一个步骤可以为您提供数据的嵌入表示。这里我们假设 my_package.my_model 是一个 Keras 模型,它接收输入并输出数据的嵌入,而 my_package.my_data 是您的数据集加载器。

from my_package import my_model, my_data
from keras.wrappers import SKLearnTransformer
from sklearn.frozen import FrozenEstimator # requires scikit-learn>=1.6
from sklearn.pipeline import make_pipeline
from sklearn.ensemble import HistGradientBoostingClassifier

X, y = my_data()

trs = FrozenEstimator(SKLearnTransformer(model=my_model))
pipe = make_pipeline(trs, HistGradientBoostingClassifier())
pipe.fit(X, y)

请注意,在上面的示例中,FrozenEstimator 会阻止管道中 Transformer 步骤的进一步训练,如果您不想更改当前的嵌入模型,则可以使用此方法。