當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python sklearn MLPClassifier用法及代碼示例


本文簡要介紹python語言中 sklearn.neural_network.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 或隨機梯度下降優化 log-loss 函數。

參數

hidden_layer_sizes元組,長度= n_layers - 2,默認=(100,)

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

activation{‘identity’, ‘logistic’, ‘tanh’, ‘relu’},默認='relu'

隱藏層的激活函數。

  • ‘identity’, no-op 激活,用於實現線性瓶頸,返回 f(x) = x
  • ‘logistic’,邏輯 sigmoid 函數,返回 f(x) = 1 /(1 + exp(-x))。
  • ‘tanh’,雙曲 tan 函數,返回 f(x) = tanh(x)。
  • ‘relu’,整流後的線性單位函數,返回 f(x) = max(0, x)
solver{‘lbfgs’, ‘sgd’, ‘adam’},默認='adam'

權重優化的求解器。

  • ‘lbfgs’ 是quasi-Newton 方法係列中的優化器。
  • ‘sgd’ 指的是隨機梯度下降。
  • ‘adam’ 指的是由 Kingma、Diederik 和 Jimmy Ba 提出的基於隨機梯度的優化器

注意:就訓練時間和驗證分數而言,默認求解器 ‘adam’ 在相對較大的數據集(具有數千個訓練樣本或更多)上運行良好。然而,對於小型數據集,‘lbfgs’ 可以更快地收斂並表現更好。

alpha浮點數,默認=0.0001

L2 懲罰(正則化項)參數。

batch_size整數,默認='自動'

隨機優化器的小批量大小。如果求解器是‘lbfgs’,分類器將不使用小批量。當設置為 “auto”、batch_size=min(200, n_samples) 時。

learning_rate{‘constant’, ‘invscaling’, ‘adaptive’},默認='常量'

權重更新的學習率計劃。

  • ‘constant’ 是由‘learning_rate_init’ 給出的恒定學習率。
  • ‘invscaling’ 使用‘power_t’ 的逆縮放 index 逐漸降低每個時間步‘t’ 的學習率。 effective_learning_rate = learning_rate_init /pow(t, power_t)
  • ‘adaptive’ 保持學習率恒定為 ‘learning_rate_init’ 隻要訓練損失不斷減少。如果 ‘early_stopping’ 開啟,每次連續兩個 epoch 未能將訓練損失減少至少 tol 或未能將驗證分數增加至少 tol 時,當前學習率除以 5。

僅在 solver='sgd' 時使用。

learning_rate_init浮點數,默認=0.001

使用的初始學習率。它控製更新權重的步長。僅當solver=’sgd’或‘adam’時使用。

power_t浮點數,默認=0.5

逆縮放學習率的 index 。當learning_rate設置為‘invscaling’時,它用於更新有效學習率。僅在solver='sgd'時使用。

max_iter整數,默認=200

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

shuffle布爾,默認=真

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

random_stateint,RandomState 實例,默認=無

確定權重和偏差初始化的隨機數生成,如果使用提前停止則確定 train-test 分割,並在求解器=’sgd’或 ‘adam’ 時進行批量采樣。傳遞 int 以獲得跨多個函數調用的可重現結果。請參閱術語表。

tol浮點數,默認=1e-4

優化的容差。當 n_iter_no_change 連續迭代的損失或分數沒有提高至少 tol 時,除非將 learning_rate 設置為 ‘adaptive’,否則認為達到收斂並停止訓練。

verbose布爾,默認=假

是否將進度消息打印到標準輸出。

warm_start布爾,默認=假

當設置為 True 時,重用之前調用的解決方案作為初始化,否則,隻需擦除之前的解決方案。請參閱詞匯表。

momentum浮點數,默認=0.9

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

nesterovs_momentum布爾,默認=真

是否使用涅斯捷羅夫的動量。僅在求解器 ='sgd' 且動量 > 0 時使用。

early_stopping布爾,默認=假

當驗證分數沒有提高時,是否使用提前停止來終止訓練。如果設置為 true,它將自動留出 10% 的訓練數據作為驗證,並在驗證分數在 n_iter_no_change 連續 epoch 中至少沒有提高 tol 時終止訓練。除多標簽設置外,拆分是分層的。如果 early stop 為 False,則當訓練集的 n_iter_no_change 個連續通過訓練損失的改善不超過 tol 時,訓練停止。僅在solver='sgd' 或‘adam’ 時有效。

validation_fraction浮點數,默認=0.1

留出作為提前停止驗證集的訓練數據的比例。必須介於 0 和 1 之間。僅在 early_stopping 為 True 時使用。

beta_1浮點數,默認=0.9

在 adam 中估計一階矩向量的 index 衰減率應該在 [0, 1) 中。僅在solver='adam'時使用。

beta_2浮點數,默認=0.999

在 adam 中估計二階矩向量的 index 衰減率應該在 [0, 1) 中。僅在solver='adam'時使用。

epsilon浮點數,默認=1e-8

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

n_iter_no_change整數,默認=10

不滿足tol 改進的最大時期數。僅在solver='sgd' 或‘adam’ 時有效。

max_fun整數,默認=15000

僅在求解器='lbfgs' 時使用。損失函數調用的最大次數。求解器迭代直到收斂(由‘tol’確定),迭代次數達到max_iter,或者這個損失函數調用次數。請注意,損失函數調用的次數將大於或等於 MLPClassifier 的迭代次數。

屬性

classes_ndarray 或形狀的 ndarray 列表 (n_classes,)

每個輸出的類標簽。

loss_浮點數

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

best_loss_浮點數

求解器在整個擬合過程中達到的最小損失。

loss_curve_形狀列表(n_iter_,)

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

t_int

求解器在擬合期間看到的訓練樣本數。

coefs_形狀列表 (n_layers - 1,)

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

intercepts_形狀列表 (n_layers - 1,)

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

n_features_in_int

擬合期間看到的特征數。

feature_names_in_ndarray 形狀(n_features_in_,)

擬合期間看到的特征名稱。僅當 X 具有全為字符串的函數名稱時才定義。

n_iter_int

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

n_layers_int

層數。

n_outputs_int

輸出數量。

out_activation_str

輸出激活函數的名稱。

注意

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

它還可以在損失函數中添加一個正則化項,以縮小模型參數以防止過度擬合。

此實現適用於表示為密集 numpy 數組或稀疏 scipy 浮點值數組的數據。

參考

欣頓,傑弗裏·E。

“聯結主義學習程序。”人工智能 40.1(1989):185-234。

格洛羅特、澤維爾和約書亞·本吉奧。 “理解困難

訓練深度前饋神經網絡。”人工智能與統計國際會議。 2010 年。

他,凱明,等。 “深入研究整流器:超越human-level

imagenet 分類的性能。” arXiv 預印本 arXiv:1502.01852 (2015)。

Kingma、Diederik 和 Jimmy Ba。 “亞當:一種隨機的方法

優化。” arXiv 預印本 arXiv:1412.6980 (2014)。

例子

>>> 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...

相關用法


注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.neural_network.MLPClassifier。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。