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_itern_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物件

更新後的物件。