SKLearnClassifier
类keras.wrappers.SKLearnClassifier(
model, warm_start=False, model_kwargs=None, fit_kwargs=None
)
用于 Keras 模型的 scikit-learn 兼容分类器封装器。
请注意,模型初始化和训练中存在随机性来源。有关如何控制随机性,请参阅Keras 模型中的可重复性。
参数
Model
。 Model
的实例,或返回此类对象的可调用对象。 请注意,如果输入是 Model
,则除非 warm_start=True
,否则将在拟合前使用 keras.models.clone_model
进行克隆。 Model
实例需要作为已编译的形式传递。 如果是可调用对象,则必须至少接受 X
和 y
作为关键字参数。 如果用户通过 model_kwargs
传递其他参数,则也必须接受这些参数。False
。是否重用上次拟合的模型权重。 如果为 True
,则不会克隆给定的模型,并且将重用上次拟合的权重。None
。如果 model
是可调用对象,则传递给 model
的关键字参数。None
。传递给 model.fit
的关键字参数。 这些也可以直接传递给 scikit-learn 封装器的 fit
方法。 直接传递给 fit
方法的值优先于这些值。属性
Model
。 已拟合的模型。model.fit
返回的拟合历史记录。示例
这里我们使用一个函数,该函数动态创建基本的 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
,则除非 warm_start=True
,否则将在拟合前使用 keras.models.clone_model
进行克隆。 Model
实例需要作为已编译的形式传递。 如果是可调用对象,则必须至少接受 X
和 y
作为关键字参数。 如果用户通过 model_kwargs
传递其他参数,则也必须接受这些参数。False
。是否重用上次拟合的模型权重。 如果为 True
,则不会克隆给定的模型,并且将重用上次拟合的权重。None
。如果 model
是可调用对象,则传递给 model
的关键字参数。None
。传递给 model.fit
的关键字参数。 这些也可以直接传递给 scikit-learn 封装器的 fit
方法。 直接传递给 fit
方法的值优先于这些值。属性
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 兼容转换器封装器。
请注意,这是一个 scikit-learn 兼容的转换器,而不是深度学习意义上的转换器。
另请注意,模型初始化和训练中存在随机性来源。 有关如何控制随机性,请参阅 Keras 模型中的可重复性。
参数
Model
。 Model
的实例,或返回此类对象的可调用对象。 请注意,如果输入是 Model
,则除非 warm_start=True
,否则将在拟合前使用 keras.models.clone_model
进行克隆。 Model
实例需要作为已编译的形式传递。 如果是可调用对象,则必须至少接受 X
和 y
作为关键字参数。 如果用户通过 model_kwargs
传递其他参数,则也必须接受这些参数。False
。是否重用上次拟合的模型权重。 如果为 True
,则不会克隆给定的模型,并且将重用上次拟合的权重。None
。如果 model
是可调用对象,则传递给 model
的关键字参数。None
。传递给 model.fit
的关键字参数。 这些也可以直接传递给 scikit-learn 封装器的 fit
方法。 直接传递给 fit
方法的值优先于这些值。属性
Model
。 已拟合的模型。model.fit
返回的拟合历史记录。示例
scikit-learn 转换器的常见用例是有一个步骤可以为您提供数据的嵌入。 在这里,我们假设 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
阻止了管道中转换器步骤的任何进一步训练,如果您不想更改手头的嵌入模型,则可能会出现这种情况。