多層感知器迴歸器#

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.

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

scoresample_weight 參數的中繼資料路由。

回傳值:
self物件

更新後的物件。