Huber 回歸器#
- class sklearn.linear_model.HuberRegressor(*, epsilon=1.35, max_iter=100, alpha=0.0001, warm_start=False, fit_intercept=True, tol=1e-05)[原始碼]#
L2 正規化的線性回歸模型,對離群值具有穩健性。
Huber 迴歸器針對滿足
|(y - Xw - c) / sigma| < epsilon
條件的樣本,最佳化平方損失;針對滿足|(y - Xw - c) / sigma| > epsilon
條件的樣本,則最佳化絕對損失。其中模型係數w
、截距c
和尺度sigma
為待最佳化的參數。參數 sigma 確保當 y 按某個因子放大或縮小時,無需重新調整 epsilon 即可達到相同的穩健性。請注意,這並未考慮到 X 的不同特徵可能具有不同的尺度。Huber 損失函數的優點是不會受到離群值的嚴重影響,同時也不會完全忽略它們的影響。
請在使用者指南中閱讀更多資訊
於 0.18 版本新增。
- 參數:
- epsilonfloat,預設值 = 1.35
參數 epsilon 控制應分類為離群值的樣本數量。epsilon 越小,對離群值越穩健。epsilon 必須在
[1, inf)
範圍內。- max_iterint,預設值 = 100
scipy.optimize.minimize(method="L-BFGS-B")
應運行的最大迭代次數。- alphafloat,預設值 = 0.0001
平方 L2 正則化的強度。請注意,懲罰等於
alpha * ||w||^2
。必須在[0, inf)
範圍內。- warm_startbool,預設值 = False
如果需要重複使用先前使用模型的已儲存屬性,則此選項很有用。如果設定為 False,則每次呼叫 fit 時都會重寫係數。請參閱詞彙表。
- fit_interceptbool,預設值 = True
是否擬合截距。如果資料已集中在原點周圍,則可以將此值設定為 False。
- tolfloat,預設值 = 1e-05
當
max{|proj g_i | i = 1, ..., n}
<=tol
時,迭代將停止,其中 pg_i 是投影梯度的第 i 個分量。
- 屬性:
- coef_陣列,形狀 (n_features,)
透過最佳化 L2 正規化 Huber 損失取得的特徵。
- intercept_float
偏差。
- scale_float
|y - Xw - c|
被縮小的數值。- n_features_in_int
在fit期間看到的特徵數量。
於 0.24 版本新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在fit期間看到的特徵名稱。僅當
X
具有全為字串的特徵名稱時定義。於 1.0 版本新增。
- n_iter_int
scipy.optimize.minimize(method="L-BFGS-B")
已運行的迭代次數。在 0.20 版本中變更: 在 SciPy <= 1.0.0 中,lbfgs 迭代次數可能超過
max_iter
。n_iter_
現在最多回報max_iter
。- outliers_陣列,形狀 (n_samples,)
一個布林遮罩,當樣本被識別為離群值時設定為 True。
另請參閱
RANSACRegressor
RANSAC(隨機樣本共識)演算法。
TheilSenRegressor
Theil-Sen 估計器穩健多變量迴歸模型。
SGDRegressor
透過使用 SGD 最小化正規化經驗損失來擬合。
參考文獻
[1]Peter J. Huber, Elvezio M. Ronchetti, Robust Statistics Concomitant scale estimates, pg 172
[2]Art B. Owen (2006), A robust hybrid of lasso and ridge regression. https://statweb.stanford.edu/~owen/reports/hhu.pdf
範例
>>> import numpy as np >>> from sklearn.linear_model import HuberRegressor, LinearRegression >>> from sklearn.datasets import make_regression >>> rng = np.random.RandomState(0) >>> X, y, coef = make_regression( ... n_samples=200, n_features=2, noise=4.0, coef=True, random_state=0) >>> X[:4] = rng.uniform(10, 20, (4, 2)) >>> y[:4] = rng.uniform(10, 20, 4) >>> huber = HuberRegressor().fit(X, y) >>> huber.score(X, y) -7.284... >>> huber.predict(X[:1,]) array([806.7200...]) >>> linear = LinearRegression().fit(X, y) >>> print("True coefficients:", coef) True coefficients: [20.4923... 34.1698...] >>> print("Huber coefficients:", huber.coef_) Huber coefficients: [17.7906... 31.0106...] >>> print("Linear Regression coefficients:", linear.coef_) Linear Regression coefficients: [-1.9221... 7.0226...]
- fit(X, y, sample_weight=None)[原始碼]#
根據給定的訓練資料擬合模型。
- 參數:
- X類陣列,形狀 (n_samples, n_features)
訓練向量,其中
n_samples
為樣本數,n_features
為特徵數。- y類陣列,形狀 (n_samples,)
相對於 X 的目標向量。
- sample_weight類陣列,形狀 (n_samples,)
給予每個樣本的權重。
- 返回:
- self物件
擬合的
HuberRegressor
估計器。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看使用者指南,了解路由機制如何運作。
- 返回:
- routingMetadataRequest
一個封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估計器的參數。
- 參數:
- deepbool,預設值=True
若為 True,將會回傳此估計器及其包含的子物件(也是估計器)的參數。
- 返回:
- paramsdict
參數名稱對應到其值的字典。
- predict(X)[原始碼]#
使用線性模型進行預測。
- 參數:
- Xarray-like 或稀疏矩陣,形狀 (n_samples, n_features)
樣本。
- 返回:
- Carray,形狀 (n_samples,)
回傳預測值。
- 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
的期望值,而忽略輸入特徵的常數模型,會得到 \(R^2\) 分數 0.0。- 參數:
- Xarray-like,形狀為 (n_samples, n_features)
測試樣本。對於某些估計器,這可能是一個預先計算的核矩陣或通用物件的列表,其形狀為
(n_samples, n_samples_fitted)
,其中n_samples_fitted
是估計器擬合時使用的樣本數量。- yarray-like,形狀為 (n_samples,) 或 (n_samples, n_outputs)
X
的真實值。- sample_weightarray-like,形狀為 (n_samples,),預設值=None
樣本權重。
- 返回:
- scorefloat
self.predict(X)
相對於y
的 \(R^2\)。
注意
當在迴歸器上呼叫
score
時,使用的 \(R^2\) 分數從版本 0.23 開始使用multioutput='uniform_average'
,以保持與r2_score
的預設值一致。這會影響所有多輸出迴歸器的score
方法(除了MultiOutputRegressor
之外)。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') HuberRegressor [原始碼]#
請求傳遞給
fit
方法的中繼資料。請注意,只有在
enable_metadata_routing=True
的情況下,此方法才相關(請參閱sklearn.set_config
)。請參閱 使用者指南,了解路由機制如何運作。每個參數的選項如下:
True
:請求中繼資料,並在提供時傳遞給fit
。如果未提供中繼資料,則會忽略請求。False
:不請求中繼資料,並且元估計器不會將其傳遞給fit
。None
:不請求中繼資料,如果使用者提供,元估計器將引發錯誤。str
:中繼資料應使用此給定的別名而不是原始名稱傳遞給元估計器。
預設值 (
sklearn.utils.metadata_routing.UNCHANGED
) 會保留現有的請求。這允許您變更某些參數的請求,而不變更其他參數的請求。在 1.3 版本中新增。
注意
這個方法僅在將此估算器作為元估算器的子估算器使用時才相關,例如在
Pipeline
中使用。否則它沒有任何效果。- 參數:
- sample_weightstr、True、False 或 None,預設為 sklearn.utils.metadata_routing.UNCHANGED
在
fit
中用於sample_weight
參數的中繼資料路由。
- 返回:
- self物件
更新後的物件。
- set_params(**params)[原始碼]#
設定此估算器的參數。
此方法適用於簡單的估算器以及巢狀物件 (例如
Pipeline
)。後者具有<元件>__<參數>
形式的參數,因此可以更新巢狀物件的每個元件。- 參數:
- **paramsdict
估算器參數。
- 返回:
- self估算器實例
估算器實例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') HuberRegressor [原始碼]#
請求傳遞至
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物件
更新後的物件。