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
用於
fit
中coef_init
參數的中繼資料路由。- intercept_initstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED
用於
fit
中intercept_init
參數的中繼資料路由。- sample_weightstr、True、False 或 None,預設值=sklearn.utils.metadata_routing.UNCHANGED
用於
fit
中sample_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_fit
中sample_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
score
中sample_weight
參數的中繼資料路由。
- 回傳:
- self物件
更新後的物件。
- sparsify()[原始碼]#
將係數矩陣轉換為稀疏格式。
將
coef_
成員轉換為 scipy.sparse 矩陣,對於 L1 正規化模型來說,這比一般的 numpy.ndarray 表示法更節省記憶體和儲存空間。intercept_
成員不會被轉換。- 回傳:
- self
已擬合的估計器。
備註
對於非稀疏模型,也就是說,當
coef_
中沒有很多零時,這實際上可能會增加記憶體使用量,因此請謹慎使用此方法。一個經驗法則是,零元素的數量(可以使用(coef_ == 0).sum()
計算)必須超過 50%,才能提供顯著的好處。在呼叫此方法後,在您呼叫 densify 之前,使用 partial_fit 方法(如果有的話)進行進一步擬合將無法工作。