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
會阻止管道中轉換器步驟的任何進一步訓練,如果您不想變更手邊的嵌入模型,則可能會發生這種情況。