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: ModelModel 的實例,或返回此類物件的可呼叫物件。請注意,如果輸入是 Model,除非 warm_start=True,否則在擬合之前,將使用 `keras.models.clone_model` 複製它。Model 實例需要作為已編譯的物件傳遞。如果是可呼叫物件,則必須至少接受 Xy 作為關鍵字參數。如果使用者透過 `model_kwargs` 傳遞其他參數,則必須接受這些參數。
  • warm_start: bool,預設為 False。是否重複使用先前擬合的模型權重。如果為 True,則不會複製給定的模型,並且將重複使用先前擬合的權重。
  • model_kwargs: dict,預設為 None。如果 `model` 是可呼叫物件,則傳遞給 model 的關鍵字參數。
  • fit_kwargs: dict,預設為 None。傳遞給 model.fit 的關鍵字參數。這些也可以直接傳遞給 scikit-learn 包裝器的 `fit` 方法。直接傳遞給 `fit` 方法的值優先於這些值。

屬性

  • model_ : Model 已擬合的模型。
  • history_ : dict 擬合的歷史記錄,由 `model.fit` 返回。
  • classes_ : 類陣列,形狀=(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: ModelModel 的實例,或返回此類物件的可呼叫物件。請注意,如果輸入是 Model,除非 warm_start=True,否則在擬合之前,將使用 `keras.models.clone_model` 複製它。Model 實例需要作為已編譯的物件傳遞。如果是可呼叫物件,則必須至少接受 Xy 作為關鍵字參數。如果使用者透過 `model_kwargs` 傳遞其他參數,則必須接受這些參數。
  • warm_start: bool,預設為 False。是否重複使用先前擬合的模型權重。如果為 True,則不會複製給定的模型,並且將重複使用先前擬合的權重。
  • model_kwargs: dict,預設為 None。如果 `model` 是可呼叫物件,則傳遞給 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 相容轉換器包裝器。

請注意,這是 scikit-learn 相容的轉換器,而不是深度學習意義上的轉換器。

另請注意,模型初始化和訓練中存在隨機性來源。請參閱 Keras 模型中的可重現性,以了解如何控制隨機性。

參數

  • model: ModelModel 的實例,或返回此類物件的可呼叫物件。請注意,如果輸入是 Model,除非 warm_start=True,否則在擬合之前,將使用 `keras.models.clone_model` 複製它。Model 實例需要作為已編譯的物件傳遞。如果是可呼叫物件,則必須至少接受 Xy 作為關鍵字參數。如果使用者透過 `model_kwargs` 傳遞其他參數,則必須接受這些參數。
  • warm_start: bool,預設為 False。是否重複使用先前擬合的模型權重。如果為 True,則不會複製給定的模型,並且將重複使用先前擬合的權重。
  • model_kwargs: dict,預設為 None。如果 `model` 是可呼叫物件,則傳遞給 model 的關鍵字參數。
  • fit_kwargs: dict,預設為 None。傳遞給 model.fit 的關鍵字參數。這些也可以直接傳遞給 scikit-learn 包裝器的 `fit` 方法。直接傳遞給 `fit` 方法的值優先於這些值。

屬性

  • model_ : Model 已擬合的模型。
  • history_ : dict 擬合的歷史記錄,由 `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` 可防止在管線中對轉換器步驟進行任何進一步的訓練,如果您不想更改手邊的嵌入模型,情況可能就是如此。