MLPClassifier#

class sklearn.neural_network.MLPClassifier(hidden_layer_sizes=(100,), activation='relu', *, solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08, n_iter_no_change=10, max_fun=15000)[原始碼]#

多層感知器分類器。

此模型使用 LBFGS 或隨機梯度下降優化對數損失函數。

於 0.18 版本新增。

參數:
hidden_layer_sizesarray-like of shape(n_layers - 2,), default=(100,)

第 i 個元素代表第 i 個隱藏層中的神經元數量。

activation{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, default=’relu’

隱藏層的激活函數。

  • ‘identity’,無操作激活,適用於實現線性瓶頸,返回 f(x) = x

  • ‘logistic’,邏輯 sigmoid 函數,返回 f(x) = 1 / (1 + exp(-x))。

  • ‘tanh’,雙曲正切函數,返回 f(x) = tanh(x)。

  • ‘relu’,修正線性單元函數,返回 f(x) = max(0, x)

solver{‘lbfgs’, ‘sgd’, ‘adam’}, default=’adam’

用於權重優化的求解器。

  • ‘lbfgs’ 是一系列準牛頓方法中的一種優化器。

  • ‘sgd’ 指的是隨機梯度下降。

  • ‘adam’ 指的是由 Kingma、Diederik 和 Jimmy Ba 提出的基於隨機梯度的優化器。

有關 Adam 優化器與 SGD 之間的比較,請參閱比較 MLPClassifier 的隨機學習策略

注意:預設求解器 'adam' 在相對較大的數據集(具有數千個或更多訓練樣本)上,在訓練時間和驗證分數方面都表現相當不錯。但是,對於小型數據集,'lbfgs' 可以更快地收斂並表現更好。

alphafloat, default=0.0001

L2 正規化項的強度。當添加到損失時,L2 正規化項會除以樣本大小。

有關不同的正規化用法的範例和視覺化,請參閱多層感知器中的變動正規化

batch_sizeint, default=’auto’

隨機優化器的迷你批次大小。如果求解器是 'lbfgs',則分類器不會使用迷你批次。當設定為 "auto" 時,batch_size=min(200, n_samples)

learning_rate{‘constant’, ‘invscaling’, ‘adaptive’}, default=’constant’

權重更新的學習率排程。

  • ‘constant’ 是由 ‘learning_rate_init’ 給定的恆定學習率。

  • ‘invscaling’ 在每個時間步長 ‘t’ 使用 ‘power_t’ 的逆縮放指數,逐漸降低學習率。 effective_learning_rate = learning_rate_init / pow(t, power_t)

  • 只要訓練損失持續減少,'adaptive' 會將學習率保持恆定為 'learning_rate_init'。如果兩個連續的 epoch 未能將訓練損失至少減少 tol,或者如果開啟 'early_stopping' 則未能將驗證分數至少增加 tol,則目前的學習率會除以 5。

僅在 solver='sgd' 時使用。

learning_rate_initfloat, default=0.001

使用的初始學習率。它控制權重更新中的步長。僅在 solver='sgd' 或 'adam' 時使用。

power_tfloat, default=0.5

反向縮放學習率的指數。當 learning_rate 設定為 'invscaling' 時,會用於更新有效學習率。僅在 solver='sgd' 時使用。

max_iterint, default=200

最大迭代次數。求解器會迭代直到收斂(由 'tol' 決定)或達到這個迭代次數。對於隨機求解器 ('sgd', 'adam'),請注意,這決定了 epoch 的數量(每個資料點將被使用的次數),而不是梯度步驟的數量。

shufflebool, default=True

是否在每次迭代中打亂樣本。僅在 solver='sgd' 或 'adam' 時使用。

random_stateint, RandomState instance, default=None

決定權重和偏差初始化的隨機數生成、如果使用提早停止的訓練-測試分割,以及當 solver='sgd' 或 'adam' 時的批次取樣。傳遞一個 int 以便跨多個函式呼叫產生可重現的結果。請參閱詞彙表

tolfloat, default=1e-4

最佳化的容忍度。當損失或分數在連續 n_iter_no_change 次迭代中,沒有至少改善 tol 時,除非 learning_rate 設定為 'adaptive',否則會認為已達到收斂並停止訓練。

verbosebool,預設值為 False

是否將進度訊息列印到 stdout。

warm_startbool,預設值為 False

當設為 True 時,重複使用先前呼叫 fit 的解作為初始化,否則僅清除先前的解。請參閱 詞彙表

momentumfloat,預設值為 0.9

梯度下降更新的動量。應介於 0 和 1 之間。僅當 solver='sgd' 時使用。

nesterovs_momentumbool,預設值為 True

是否使用 Nesterov 的動量。僅當 solver='sgd' 且 momentum > 0 時使用。

early_stoppingbool,預設值為 False

是否使用提前停止來終止訓練,當驗證分數沒有改善時。如果設定為 true,它會自動保留 10% 的訓練資料作為驗證集,並且當驗證分數在連續 n_iter_no_change 個 epoch 中沒有至少改善 tol 時終止訓練。分割是分層的,但在多標籤設定中除外。如果 early stopping 為 False,則當訓練損失在連續 n_iter_no_change 次訓練集傳遞中沒有改善超過 tol 時,訓練會停止。僅當 solver='sgd' 或 'adam' 時有效。

validation_fractionfloat,預設值為 0.1

作為提前停止驗證集而保留的訓練資料比例。必須介於 0 和 1 之間。僅當 early_stopping 為 True 時使用。

beta_1float,預設值為 0.9

adam 中第一動量向量估計的指數衰減率,應在 [0, 1) 之間。僅當 solver='adam' 時使用。

beta_2float,預設值為 0.999

adam 中第二動量向量估計的指數衰減率,應在 [0, 1) 之間。僅當 solver='adam' 時使用。

epsilonfloat,預設值為 1e-8

adam 中用於數值穩定性的值。僅當 solver='adam' 時使用。

n_iter_no_changeint,預設值為 10

不符合 tol 改善的最大 epoch 數。僅當 solver='sgd' 或 'adam' 時有效。

在 0.20 版本中新增。

max_funint,預設值為 15000

僅當 solver='lbfgs' 時使用。損失函數呼叫的最大次數。求解器會迭代直到收斂(由 'tol' 決定)、迭代次數達到 max_iter,或損失函數呼叫次數達到此數。請注意,對於 MLPClassifier,損失函數呼叫次數將大於或等於迭代次數。

在 0.22 版本中新增。

屬性:
classes_ndarray 或形狀為 (n_classes,) 的 ndarray 列表

每個輸出的類別標籤。

loss_float

使用損失函數計算出的當前損失。

best_loss_float 或 None

求解器在整個擬合過程中達到的最小損失。如果 early_stopping=True,則此屬性會設定為 None。請改為參考擬合的 best_validation_score_ 屬性。

loss_curve_形狀為 (n_iter_,) 的列表

列表中第 i 個元素表示第 i 次迭代的損失。

validation_scores_形狀為 (n_iter_,) 的列表或 None

在保留的驗證集上每次迭代的分數。報告的分數是準確度分數。僅當 early_stopping=True 時可用,否則此屬性會設定為 None

best_validation_score_float 或 None

觸發提前停止的最佳驗證分數(即準確度分數)。僅當 early_stopping=True 時可用,否則此屬性會設定為 None

t_int

求解器在擬合過程中看到的訓練樣本數。

coefs_形狀為 (n_layers - 1,) 的列表

列表中第 i 個元素表示對應於第 i 層的權重矩陣。

intercepts_形狀為 (n_layers - 1,) 的列表

列表中第 i 個元素表示對應於第 i+1 層的偏置向量。

n_features_in_int

fit 期間看到的特徵數。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅當 X 具有全部為字串的特徵名稱時才會定義。

在 1.0 版本中新增。

n_iter_int

求解器已執行的迭代次數。

n_layers_int

層數。

n_outputs_int

輸出數。

out_activation_str

輸出激活函數的名稱。

另請參閱

MLPRegressor

多層感知器迴歸器。

BernoulliRBM

白努利限制玻爾茲曼機 (RBM)。

注意事項

MLPClassifier 會迭代訓練,因為在每個時間步,都會計算損失函數相對於模型參數的偏導數,以更新參數。

它也可以將正規化項加入損失函數,以縮小模型參數來防止過度擬合。

此實作適用於以密集 numpy 陣列或稀疏 scipy 陣列表示的浮點數值資料。

參考文獻

Hinton, Geoffrey E. “Connectionist learning procedures.” Artificial intelligence 40.1 (1989): 185-234.

Glorot, Xavier, and Yoshua Bengio. “Understanding the difficulty of training deep feedforward neural networks.” International Conference on Artificial Intelligence and Statistics. 2010.

He, Kaiming, et al (2015). “Delving deep into rectifiers: Surpassing human-level performance on imagenet classification.”

Kingma, Diederik, and Jimmy Ba (2014) “Adam: A method for stochastic optimization.”

範例

>>> from sklearn.neural_network import MLPClassifier
>>> from sklearn.datasets import make_classification
>>> from sklearn.model_selection import train_test_split
>>> X, y = make_classification(n_samples=100, random_state=1)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y,
...                                                     random_state=1)
>>> clf = MLPClassifier(random_state=1, max_iter=300).fit(X_train, y_train)
>>> clf.predict_proba(X_test[:1])
array([[0.038..., 0.961...]])
>>> clf.predict(X_test[:5, :])
array([1, 0, 1, 0, 1])
>>> clf.score(X_test, y_test)
0.8...
fit(X, y)[來源]#

將模型擬合到資料矩陣 X 和目標值 y。

參數:
X形狀為 (n_samples, n_features) 的 ndarray 或稀疏矩陣

輸入資料。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的 ndarray

目標值(分類中的類別標籤,迴歸中的實數)。

返回:
self物件

返回訓練好的 MLP 模型。

get_metadata_routing()[來源]#

取得此物件的中繼資料路由。

請查看 使用者指南,了解路由機制如何運作。

返回:
routingMetadataRequest

一個 MetadataRequest,封裝路由資訊。

get_params(deep=True)[來源]#

取得此估計器的參數。

參數:
deepbool,預設值為 True

如果為 True,將返回此估計器和包含的子物件(為估計器)的參數。

返回:
paramsdict

對應其值的參數名稱。

partial_fit(X, y, classes=None)[來源]#

使用給定資料的單次迭代更新模型。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

輸入資料。

y形狀為 (n_samples,) 的類陣列

目標值。

classes形狀為 (n_classes,) 的陣列,預設值為 None

對 partial_fit 的所有呼叫中的類別。可以透過 np.unique(y_all) 取得,其中 y_all 是整個資料集的目標向量。此引數是首次呼叫 partial_fit 所必需的,並且可以在後續呼叫中省略。請注意,y 不需要包含 classes 中的所有標籤。

返回:
self物件

訓練好的 MLP 模型。

predict(X)[來源]#

使用多層感知器分類器進行預測。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

輸入資料。

返回:
yndarray,形狀為 (n_samples,) 或 (n_samples, n_classes)

預測的類別。

predict_log_proba(X)[原始碼]#

傳回機率估計的對數值。

參數:
X形狀為 (n_samples, n_features) 的 ndarray

輸入資料。

返回:
log_y_prob形狀為 (n_samples, n_classes) 的 ndarray

模型中每個類別的樣本預測對數機率,其中類別的順序與 self.classes_ 中的順序相同。 等同於 log(predict_proba(X))

predict_proba(X)[原始碼]#

機率估計。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

輸入資料。

返回:
y_prob形狀為 (n_samples, n_classes) 的 ndarray

模型中每個類別的樣本預測機率,其中類別的順序與 self.classes_ 中的順序相同。

score(X, y, sample_weight=None)[原始碼]#

傳回給定測試資料和標籤的平均準確度。

在多標籤分類中,這是子集準確度,這是一個嚴苛的指標,因為您需要每個樣本都正確預測每個標籤集。

參數:
X形狀為 (n_samples, n_features) 的類陣列 (array-like)

測試樣本。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列 (array-like)

X 的真實標籤。

sample_weight形狀為 (n_samples,) 的類陣列 (array-like),預設為 None

樣本權重。

返回:
scorefloat

self.predict(X) 相對於 y 的平均準確度。

set_params(**params)[原始碼]#

設定此估算器的參數。

此方法適用於簡單的估算器以及巢狀物件(例如 Pipeline)。 後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估算器參數。

返回:
self估算器實例

估算器實例。

set_partial_fit_request(*, classes: bool | None | str = '$UNCHANGED$') MLPClassifier[原始碼]#

要求傳遞到 partial_fit 方法的中繼資料。

請注意,此方法僅在 enable_metadata_routing=True 時相關(請參閱 sklearn.set_config)。請參閱 使用者指南,了解路由機制如何運作。

每個參數的選項為

  • True:要求中繼資料,如果提供,則傳遞給 partial_fit。 如果未提供中繼資料,則忽略此要求。

  • False:不要求中繼資料,並且元估算器不會將其傳遞給 partial_fit

  • None:不要求中繼資料,如果使用者提供,元估算器將會引發錯誤。

  • str:中繼資料應使用給定的別名而不是原始名稱傳遞給元估算器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的要求。 這允許您變更某些參數的要求,而不變更其他參數。

在 1.3 版中新增。

請注意

僅當此估算器用作元估算器的子估算器時,例如在 Pipeline 中使用時,此方法才相關。 否則它沒有效果。

參數:
classesstr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

partial_fitclasses 參數的中繼資料路由。

返回:
self物件

更新後的物件。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') MLPClassifier[原始碼]#

要求傳遞到 score 方法的中繼資料。

請注意,此方法僅在 enable_metadata_routing=True 時相關(請參閱 sklearn.set_config)。請參閱 使用者指南,了解路由機制如何運作。

每個參數的選項為

  • True:要求中繼資料,如果提供,則傳遞給 score。 如果未提供中繼資料,則忽略此要求。

  • False:不要求中繼資料,並且元估算器不會將其傳遞給 score

  • None:不要求中繼資料,如果使用者提供,元估算器將會引發錯誤。

  • str:中繼資料應使用給定的別名而不是原始名稱傳遞給元估算器。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的要求。 這允許您變更某些參數的要求,而不變更其他參數。

在 1.3 版中新增。

請注意

僅當此估算器用作元估算器的子估算器時,例如在 Pipeline 中使用時,此方法才相關。 否則它沒有效果。

參數:
sample_weightstr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

scoresample_weight 參數的中繼資料路由。

返回:
self物件

更新後的物件。