多層感知器迴歸器#
- class sklearn.neural_network.MLPRegressor(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_sizes形狀為 (n_layers - 2,) 的類陣列,預設值為 (100,)
第 i 個元素表示第 i 個隱藏層中的神經元數量。
- activation{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, 預設值為 ‘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’}, 預設值為 ‘adam’
權重優化的求解器。
‘lbfgs’ 是擬牛頓法系列中的一個優化器。
‘sgd’ 指的是隨機梯度下降。
‘adam’ 指的是 Kingma、Diederik 和 Jimmy Ba 提出的基於隨機梯度的優化器。
有關 Adam 優化器和 SGD 之間的比較,請參閱比較 MLPClassifier 的隨機學習策略。
注意:預設求解器 ‘adam’ 在相對較大的資料集(具有數千個或更多訓練樣本)上,在訓練時間和驗證分數方面表現相當出色。然而,對於小型資料集,‘lbfgs’ 可以更快收斂並表現更好。
- alphafloat,預設值為 0.0001
L2 正規化項的強度。當加入到損失時,L2 正規化項會除以樣本大小。
- batch_sizeint,預設值為 ‘auto’
隨機優化器的小批量大小。如果求解器是 ‘lbfgs’,則迴歸器將不會使用小批量。當設定為 “auto” 時,
batch_size=min(200, n_samples)
。- learning_rate{‘constant’, ‘invscaling’, ‘adaptive’}, 預設值為 ‘constant’
權重更新的學習率排程。
‘constant’ 是由 ‘learning_rate_init’ 給定的常數學習率。
‘invscaling’ 使用 ‘power_t’ 的反向縮放指數,在每個時間步驟 ‘t’ 逐漸降低學習率
learning_rate_
。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,預設值為 0.001
使用的初始學習率。它控制更新權重時的步長。僅當 solver=’sgd’ 或 ‘adam’ 時使用。
- power_tfloat,預設值為 0.5
反向縮放學習率的指數。當 learning_rate 設定為 ‘invscaling’ 時,用於更新有效學習率。僅當 solver=’sgd’ 時使用。
- max_iterint,預設值為 200
最大迭代次數。求解器會迭代直到收斂(由 ‘tol’ 決定)或達到此迭代次數。對於隨機求解器 (‘sgd’, ‘adam’),請注意,這決定了 epoch 的數量(每個資料點將被使用的次數),而不是梯度步數。
- shufflebool,預設值為 True
是否在每次迭代中打亂樣本。僅當 solver=’sgd’ 或 ‘adam’ 時使用。
- random_stateint, RandomState 實例,預設值為 None
決定權重和偏差初始化的隨機數生成方式、是否使用提前停止的訓練/測試集分割,以及當 solver=’sgd’ 或 ‘adam’ 時的批次抽樣。傳入一個整數以便在多次函數呼叫中獲得可重現的結果。請參閱詞彙表。
- tol浮點數,預設值=1e-4
優化的容忍度。當損失或分數連續
n_iter_no_change
次迭代沒有改善至少tol
時,除非learning_rate
設定為 ‘adaptive’,否則會認為已達到收斂並停止訓練。- verbose布林值,預設值=False
是否將進度訊息列印到標準輸出。
- warm_start布林值,預設值=False
當設定為 True 時,重用先前呼叫 fit 的解作為初始化,否則,僅清除先前的解。請參閱詞彙表。
- momentum浮點數,預設值=0.9
梯度下降更新的動量。應介於 0 和 1 之間。僅在 solver=’sgd’ 時使用。
- nesterovs_momentum布林值,預設值=True
是否使用 Nesterov 動量。僅在 solver=’sgd’ 且 momentum > 0 時使用。
- early_stopping布林值,預設值=False
是否使用提前停止來終止訓練,當驗證分數沒有改善時。如果設定為 True,它會自動保留
validation_fraction
的訓練資料作為驗證集,並在驗證分數連續n_iter_no_change
個 epoch 沒有改善至少tol
時終止訓練。僅當 solver=’sgd’ 或 ‘adam’ 時有效。- validation_fraction浮點數,預設值=0.1
作為提前停止的驗證集而保留的訓練資料比例。必須介於 0 和 1 之間。僅當 early_stopping 為 True 時使用。
- beta_1浮點數,預設值=0.9
adam 中第一動量向量估計的指數衰減率,應在 [0, 1) 範圍內。僅在 solver=’adam’ 時使用。
- beta_2浮點數,預設值=0.999
adam 中第二動量向量估計的指數衰減率,應在 [0, 1) 範圍內。僅在 solver=’adam’ 時使用。
- epsilon浮點數,預設值=1e-8
adam 中數值穩定性的值。僅在 solver=’adam’ 時使用。
- n_iter_no_change整數,預設值=10
不符合
tol
改善的最大 epoch 數。僅當 solver=’sgd’ 或 ‘adam’ 時有效。在版本 0.20 中新增。
- max_fun整數,預設值=15000
僅在 solver=’lbfgs’ 時使用。函數呼叫的最大次數。求解器會迭代直到收斂(由
tol
決定)、迭代次數達到 max_iter,或達到此函數呼叫次數。請注意,對於 MLPRegressor,函數呼叫次數將大於或等於迭代次數。在版本 0.22 中新增。
- 屬性:
- loss_浮點數
使用損失函數計算的當前損失。
- best_loss_浮點數
求解器在擬合過程中達到的最小損失。如果
early_stopping=True
,則此屬性設定為None
。請改為參考best_validation_score_
擬合屬性。僅當 solver=’sgd’ 或 ‘adam’ 時可存取。- loss_curve_形狀為 (
n_iter_
,) 的列表 在每個訓練步驟結束時評估的損失值。列表中的第 i 個元素表示第 i 次迭代的損失。僅當 solver=’sgd’ 或 ‘adam’ 時可存取。
- validation_scores_形狀為 (
n_iter_
,) 或 None 的列表 在保留的驗證集上每次迭代的分數。報告的分數是 R2 分數。僅在
early_stopping=True
時可用,否則此屬性設定為None
。僅當 solver=’sgd’ 或 ‘adam’ 時可存取。- best_validation_score_浮點數或 None
觸發提前停止的最佳驗證分數(即 R2 分數)。僅在
early_stopping=True
時可用,否則此屬性設定為None
。僅當 solver=’sgd’ 或 ‘adam’ 時可存取。- t_整數
求解器在擬合期間看到的訓練樣本數。數學上等於
n_iters * X.shape[0]
,表示time_step
,並由最佳化器的學習率排程器使用。- coefs_形狀為 (n_layers - 1,) 的列表
列表中的第 i 個元素表示對應於第 i 層的權重矩陣。
- intercepts_形狀為 (n_layers - 1,) 的列表
列表中的第 i 個元素表示對應於第 i + 1 層的偏差向量。
- n_features_in_整數
在fit期間看到的特徵數量。
在版本 0.24 中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
具有所有字串的特徵名稱時才定義。在版本 1.0 中新增。
- n_iter_整數
求解器已執行的迭代次數。
- n_layers_整數
層數。
- n_outputs_整數
輸出數。
- out_activation_字串
輸出激活函數的名稱。
另請參閱
伯努利 RBM
伯努利受限玻爾茲曼機 (RBM)。
多層感知器分類器
多層感知器分類器。
sklearn.linear_model.SGDRegressor
透過使用 SGD 最小化正規化經驗損失來擬合的線性模型。
注意事項
MLPRegressor 迭代地進行訓練,因為在每個時間步驟都會計算損失函數相對於模型參數的偏導數,以更新參數。
它還可以在損失函數中添加一個正規化項,以縮小模型參數,防止過擬合。
此實作適用於表示為浮點數值的密集和稀疏 numpy 陣列的資料。
參考文獻
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 MLPRegressor >>> from sklearn.datasets import make_regression >>> from sklearn.model_selection import train_test_split >>> X, y = make_regression(n_samples=200, n_features=20, random_state=1) >>> X_train, X_test, y_train, y_test = train_test_split(X, y, ... random_state=1) >>> regr = MLPRegressor(random_state=1, max_iter=2000, tol=0.1) >>> regr.fit(X_train, y_train) MLPRegressor(max_iter=2000, random_state=1, tol=0.1) >>> regr.predict(X_test[:2]) array([ 28..., -290...]) >>> regr.score(X_test, y_test) 0.98...
- fit(X, y)[原始碼]#
將模型擬合到資料矩陣 X 和目標值 y。
- 參數:
- Xndarray 或稀疏矩陣,形狀為 (n_samples, n_features)
輸入資料。
- yndarray,形狀為 (n_samples,) 或 (n_samples, n_outputs)
目標值 (分類中的類別標籤,迴歸中的實數)。
- 回傳值:
- self物件
回傳一個已訓練的 MLP 模型。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看使用者指南以了解路由機制的運作方式。
- 回傳值:
- routingMetadataRequest
一個封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deepbool,預設值為 True
如果為 True,將回傳此估算器和包含的子物件 (也是估算器) 的參數。
- 回傳值:
- paramsdict
參數名稱對應到其值的字典。
- partial_fit(X, y)[原始碼]#
使用給定的資料更新模型,進行單次迭代。
- 參數:
- X{類陣列, 稀疏矩陣},形狀為 (n_samples, n_features)
輸入資料。
- yndarray,形狀為 (n_samples,)
目標值。
- 回傳值:
- self物件
已訓練的 MLP 模型。
- predict(X)[原始碼]#
使用多層感知器模型進行預測。
- 參數:
- X{類陣列, 稀疏矩陣},形狀為 (n_samples, n_features)
輸入資料。
- 回傳值:
- yndarray,形狀為 (n_samples, n_outputs)
預測值。
- score(X, y, sample_weight=None)[原始碼]#
回傳預測的決定係數。
決定係數 \(R^2\) 定義為 \((1 - \frac{u}{v})\),其中 \(u\) 是殘差平方和
((y_true - y_pred)** 2).sum()
,而 \(v\) 是總平方和((y_true - y_true.mean()) ** 2).sum()
。最佳可能分數為 1.0,且可以是負數 (因為模型可能會任意變差)。一個總是預測y
的期望值、忽略輸入特徵的常數模型,將會獲得 0.0 的 \(R^2\) 分數。- 參數:
- X類陣列,形狀為 (n_samples, n_features)
測試樣本。對於某些估算器,這可能是一個預先計算的核矩陣或形狀為
(n_samples, n_samples_fitted)
的通用物件列表,其中n_samples_fitted
是估算器在擬合時使用的樣本數。- y類陣列,形狀為 (n_samples,) 或 (n_samples, n_outputs)
X
的真實值。- sample_weight類陣列,形狀為 (n_samples,),預設值為 None
樣本權重。
- 回傳值:
- scorefloat
self.predict(X)
相對於y
的 \(R^2\)。
注意事項
當在迴歸器上呼叫
score
時,使用的 \(R^2\) 分數從 0.23 版本開始使用multioutput='uniform_average'
,以與r2_score
的預設值保持一致。這會影響所有多輸出迴歸器 (除了MultiOutputRegressor
之外) 的score
方法。
- set_params(**params)[原始碼]#
設定此估算器的參數。
此方法適用於簡單的估算器以及巢狀物件(例如
Pipeline
)。後者具有<component>__<parameter>
形式的參數,因此可以更新巢狀物件的每個組件。- 參數:
- **paramsdict
估算器參數。
- 回傳值:
- self估算器實例
估算器實例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') MLPRegressor [原始碼]#
請求傳遞到
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物件
更新後的物件。