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.
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_fit
中classes
參數的中繼資料路由。
- 返回:
- 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
score
中sample_weight
參數的中繼資料路由。
- 返回:
- self物件
更新後的物件。