SGD 迴歸器#

class sklearn.linear_model.SGDRegressor(loss='squared_error', *, penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, tol=0.001, shuffle=True, verbose=0, epsilon=0.1, random_state=None, learning_rate='invscaling', eta0=0.01, power_t=0.25, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, warm_start=False, average=False)[原始碼]#

此線性模型透過使用 SGD (隨機梯度下降) 來最小化正規化的經驗損失。

SGD 代表隨機梯度下降:損失的梯度是針對每個樣本逐一估計的,並且模型會隨著時間推移,依照遞減的強度排程(也稱為學習率)進行更新。

正規化器是一種添加到損失函數的懲罰項,它使用平方歐幾里得範數 L2 或絕對範數 L1 或兩者的組合(彈性網路),將模型參數向零向量縮小。如果參數更新由於正規化器而越過 0.0 值,則更新將被截斷為 0.0,以允許學習稀疏模型並實現線上特徵選擇。

此實作適用於以浮點數值的密集 NumPy 陣列表示的特徵資料。

請在使用者指南中閱讀更多資訊。

參數:
lossstr,預設值為 ‘squared_error’

要使用的損失函數。可能的值為 ‘squared_error’、‘huber’、‘epsilon_insensitive’ 或 ‘squared_epsilon_insensitive’。

‘squared_error’ 指的是普通最小平方法擬合。‘huber’ 修改 ‘squared_error’,通過將超過 epsilon 距離的損失從平方損失切換為線性損失,來減少對正確擬合異常值的關注。‘epsilon_insensitive’ 忽略小於 epsilon 的誤差,並且在超過該值後變為線性;這是 SVR 中使用的損失函數。‘squared_epsilon_insensitive’ 與之相同,但超過 epsilon 容差後會變成平方損失。

有關損失公式的更多詳細資訊,請參閱使用者指南

penalty{‘l2’, ‘l1’, ‘elasticnet’, None},預設值為 ‘l2’

要使用的懲罰(也稱為正規化項)。預設值為 ‘l2’,這是線性 SVM 模型的標準正規化器。 ‘l1’ 和 ‘elasticnet’ 可能會為模型帶來 ‘l2’ 無法實現的稀疏性(特徵選擇)。當設定為 None 時,不會新增懲罰。

您可以在SGD:懲罰中查看懲罰的可視化效果。

alphafloat,預設值為 0.0001

乘以正規化項的常數。值越高,正規化越強。當 learning_rate 設定為 ‘optimal’ 時,也用於計算學習率。值必須在範圍 [0.0, inf) 內。

l1_ratiofloat,預設值為 0.15

彈性網路混合參數,其中 0 <= l1_ratio <= 1。l1_ratio=0 對應於 L2 懲罰,l1_ratio=1 對應於 L1。僅當 penalty 為 ‘elasticnet’ 時才使用。值必須在範圍 [0.0, 1.0] 內。

fit_interceptbool,預設值為 True

是否應估計截距。如果為 False,則假設資料已居中。

max_iterint,預設值為 1000

訓練資料的最大傳遞次數(也稱為 epoch)。它只會影響 fit 方法中的行為,而不會影響 partial_fit 方法。值必須在範圍 [1, inf) 內。

在版本 0.19 中新增。

tolfloat 或 None,預設值為 1e-3

停止準則。如果此值不是 None,則當連續 n_iter_no_change 個 epochs 的 (loss > best_loss - tol) 時,訓練將會停止。收斂性會根據訓練損失或驗證損失來檢查,取決於 early_stopping 參數。數值必須在 [0.0, inf) 範圍內。

在版本 0.19 中新增。

shufflebool,預設值為 True

是否在每個 epoch 後對訓練數據進行洗牌。

verboseint,預設值為 0

詳細程度。數值必須在 [0, inf) 範圍內。

epsilonfloat,預設值為 0.1

epsilon 不敏感損失函數中的 epsilon 值;僅當 loss 為 'huber'、'epsilon_insensitive' 或 'squared_epsilon_insensitive' 時有效。對於 'huber',決定了預測與實際值差距多大時可以被認為不重要的閾值。對於 epsilon 不敏感,當目前預測與正確標籤之間的差異小於此閾值時,會被忽略。數值必須在 [0.0, inf) 範圍內。

random_stateint,RandomState 實例,預設值為 None

shuffle 設定為 True 時,用於對數據進行洗牌。傳遞一個 int 值,以便在多次函數調用之間產生可重複的輸出。請參閱 詞彙表

learning_ratestr,預設值為 'invscaling'

學習率排程。

  • 'constant': eta = eta0

  • 'optimal': eta = 1.0 / (alpha * (t + t0)),其中 t0 由 Leon Bottou 提出的啟發式方法選擇。

  • 'invscaling': eta = eta0 / pow(t, power_t)

  • 'adaptive': eta = eta0,只要訓練持續減少。每當連續 n_iter_no_change 個 epochs 未能使訓練損失減少 tol 或未能使驗證分數增加 tol (如果 early_stopping 為 True),則當前學習率除以 5。

在 0.20 版本中新增:新增 'adaptive' 選項。

eta0float,預設值為 0.01

'constant'、'invscaling' 或 'adaptive' 排程的初始學習率。預設值為 0.01。數值必須在 [0.0, inf) 範圍內。

power_tfloat,預設值為 0.25

反向縮放學習率的指數。數值必須在 (-inf, inf) 範圍內。

early_stoppingbool,預設值為 False

是否使用提前停止來終止訓練,當驗證分數沒有改善時。如果設定為 True,它會自動保留一部分訓練數據作為驗證集,並且當 score 方法返回的驗證分數在連續 n_iter_no_change 個 epochs 中沒有至少改善 tol 時,訓練將終止。

請參閱 隨機梯度下降的提前停止,以取得提前停止效果的範例。

在 0.20 版本中新增:新增 'early_stopping' 選項。

validation_fractionfloat,預設值為 0.1

要保留作為提前停止驗證集的訓練數據比例。必須介於 0 和 1 之間。僅當 early_stopping 為 True 時使用。數值必須在 (0.0, 1.0) 範圍內。

在 0.20 版本中新增:新增 'validation_fraction' 選項。

n_iter_no_changeint,預設值為 5

在停止擬合之前,等待沒有改進的迭代次數。收斂性會根據訓練損失或驗證損失來檢查,取決於 early_stopping 參數。整數值必須在 [1, max_iter) 範圍內。

在 0.20 版本中新增:新增 'n_iter_no_change' 選項。

warm_startbool,預設值為 False

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

當 warm_start 為 True 時,重複呼叫 fit 或 partial_fit 可能會產生與單次呼叫 fit 不同的解,因為數據洗牌的方式不同。如果使用動態學習率,學習率會根據已看到的樣本數量進行調整。呼叫 fit 會重置此計數器,而 partial_fit 將導致增加現有的計數器。

averagebool 或 int,預設值為 False

當設定為 True 時,計算所有更新中平均的 SGD 權重,並將結果儲存在 coef_ 屬性中。如果設定為大於 1 的 int 值,則在看到的樣本總數達到 average 時,平均將會開始。所以 average=10 將在看到 10 個樣本後開始平均。

屬性:
coef_形狀為 (n_features,) 的 ndarray

分配給特徵的權重。

intercept_形狀為 (1,) 的 ndarray

截距項。

n_iter_int

達到停止準則之前的實際迭代次數。

t_int

在訓練期間執行的權重更新次數。與 (n_iter_ * n_samples + 1) 相同。

n_features_in_int

fit 期間看到的特徵數量。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

在 1.0 版本中新增。

另請參閱

HuberRegressor

對離群值具有穩健性的線性迴歸模型。

Lars

最小角度迴歸模型。

Lasso

使用 L1 先驗作為正規化器的訓練線性模型。

RANSACRegressor

RANSAC (RANdom SAmple Consensus) 演算法。

Ridge

帶有 l2 正規化的線性最小平方。

sklearn.svm.SVR

Epsilon-支援向量迴歸。

TheilSenRegressor

Theil-Sen 估計器穩健多變量迴歸模型。

範例

>>> import numpy as np
>>> from sklearn.linear_model import SGDRegressor
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler
>>> n_samples, n_features = 10, 5
>>> rng = np.random.RandomState(0)
>>> y = rng.randn(n_samples)
>>> X = rng.randn(n_samples, n_features)
>>> # Always scale the input. The most convenient way is to use a pipeline.
>>> reg = make_pipeline(StandardScaler(),
...                     SGDRegressor(max_iter=1000, tol=1e-3))
>>> reg.fit(X, y)
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('sgdregressor', SGDRegressor())])
densify()[原始碼]#

將係數矩陣轉換為密集陣列格式。

coef_ 成員(還原)轉換為 numpy.ndarray。這是 coef_ 的預設格式,並且是擬合所必需的,因此只有在先前已進行稀疏化的模型上才需要調用此方法;否則,它是一個空操作。

回傳:
self

已擬合的估計器。

fit(X, y, coef_init=None, intercept_init=None, sample_weight=None)[原始碼]#

使用隨機梯度下降擬合線性模型。

參數:
X{array-like, 稀疏矩陣}, 形狀 (n_samples, n_features)

訓練資料。

yndarray,形狀 (n_samples,)

目標值。

coef_initndarray,形狀 (n_features,), 預設值=None

用於熱啟動最佳化的初始係數。

intercept_initndarray,形狀 (1,), 預設值=None

用於熱啟動最佳化的初始截距。

sample_weightarray-like,形狀 (n_samples,), 預設值=None

應用於個別樣本的權重(未加權時為 1)。

回傳:
self物件

已擬合的 SGDRegressor 估計器。

get_metadata_routing()[原始碼]#

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

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

回傳:
routingMetadataRequest

一個封裝路由資訊的 MetadataRequest

get_params(deep=True)[原始碼]#

取得此估計器的參數。

參數:
deepbool,預設值=True

如果為 True,將回傳此估計器的參數以及包含的子物件(這些子物件也是估計器)。

回傳:
paramsdict

參數名稱對應到它們的值。

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

對給定的樣本執行一個隨機梯度下降的週期。

在內部,此方法使用 max_iter = 1。因此,不保證在調用一次後達到成本函數的最小值。諸如目標收斂和提前停止之類的事項應由使用者處理。

參數:
X{array-like, 稀疏矩陣}, 形狀 (n_samples, n_features)

訓練資料的子集。

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

目標值的子集。

sample_weightarray-like,形狀 (n_samples,), 預設值=None

應用於個別樣本的權重。如果未提供,則假設為均勻權重。

回傳:
self物件

回傳 self 的實例。

predict(X)[原始碼]#

使用線性模型進行預測。

參數:
X{array-like, 稀疏矩陣}, 形狀 (n_samples, n_features)

輸入資料。

回傳:
形狀為 (n_samples,) 的 ndarray

每個 X 元素的預測目標值。

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) 的 array-like

測試樣本。對於某些估計器,這可能是一個預先計算的內核矩陣,或是一個具有形狀 (n_samples, n_samples_fitted) 的通用物件列表,其中 n_samples_fitted 是估計器的擬合中使用的樣本數。

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

X 的真實值。

sample_weight形狀為 (n_samples,) 的 array-like,預設值=None

樣本權重。

回傳:
scorefloat

self.predict(X) 相對於 y\(R^2\)

備註

當對迴歸器調用 score 時所使用的 \(R^2\) 分數,自 0.23 版本起採用 multioutput='uniform_average',以保持與 r2_score 的預設值一致。這會影響所有多輸出迴歸器的 score 方法(除了 MultiOutputRegressor 之外)。

set_fit_request(*, coef_init: bool | None | str = '$UNCHANGED$', intercept_init: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') SGDRegressor[原始碼]#

請求傳遞到 fit 方法的中繼資料。

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

每個參數的選項如下:

  • True:請求中繼資料,並且在提供時傳遞給 fit。如果未提供中繼資料,則忽略該請求。

  • False:不請求中繼資料,並且元估計器不會將其傳遞給 fit

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

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

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

在 1.3 版本中新增。

注意

只有當此估計器用作元估計器的子估計器時,此方法才相關,例如在 Pipeline 內部使用。否則,它沒有任何作用。

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

用於 fitcoef_init 參數的中繼資料路由。

intercept_initstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED

用於 fitintercept_init 參數的中繼資料路由。

sample_weightstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED

用於 fitsample_weight 參數的中繼資料路由。

回傳:
self物件

更新後的物件。

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

設定此估計器的參數。

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

參數:
**paramsdict

估計器參數。

回傳:
self估計器實例

估計器實例。

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

請求傳遞給 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 內部使用。否則,它沒有任何作用。

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

partial_fitsample_weight 參數的中繼資料路由。

回傳:
self物件

更新後的物件。

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

請求傳遞給 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物件

更新後的物件。

sparsify()[原始碼]#

將係數矩陣轉換為稀疏格式。

coef_ 成員轉換為 scipy.sparse 矩陣,對於 L1 正規化模型來說,這比一般的 numpy.ndarray 表示法更節省記憶體和儲存空間。

intercept_ 成員不會被轉換。

回傳:
self

已擬合的估計器。

備註

對於非稀疏模型,也就是說,當 coef_ 中沒有很多零時,這實際上可能會增加記憶體使用量,因此請謹慎使用此方法。一個經驗法則是,零元素的數量(可以使用 (coef_ == 0).sum() 計算)必須超過 50%,才能提供顯著的好處。

在呼叫此方法後,在您呼叫 densify 之前,使用 partial_fit 方法(如果有的話)進行進一步擬合將無法工作。