ElasticNetCV#

class sklearn.linear_model.ElasticNetCV(*, l1_ratio=0.5, eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, precompute='auto', max_iter=1000, tol=0.0001, cv=None, copy_X=True, verbose=0, n_jobs=None, positive=False, random_state=None, selection='cyclic')[原始碼]#

彈性網路模型,沿著正規化路徑進行迭代擬合。

請參閱 交叉驗證估計器 的詞彙條目。

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

參數:
l1_ratiofloat 或 float 列表, default=0.5

介於 0 和 1 之間的浮點數,傳遞給 ElasticNet (L1 和 L2 懲罰之間的縮放)。 當 l1_ratio = 0 時,懲罰為 L2 懲罰。 當 l1_ratio = 1 時,懲罰為 L1 懲罰。 當 0 < l1_ratio < 1 時,懲罰是 L1 和 L2 的組合。 此參數可以是列表,在這種情況下,將透過交叉驗證測試不同的值,並使用給出最佳預測分數的值。 請注意,對於 l1_ratio 的值列表來說,一個好的選擇通常是放置更多接近 1 (即 Lasso) 的值,而較少接近 0 (即 Ridge) 的值,例如 [.1, .5, .7, .9, .95, .99, 1]

epsfloat, default=1e-3

路徑長度。 eps=1e-3 表示 alpha_min / alpha_max = 1e-3

n_alphasint, default=100

沿著正規化路徑的 alpha 數量,用於每個 l1_ratio。

alphasarray-like, default=None

計算模型的 alpha 列表。 如果為 None,則會自動設定 alpha。

fit_interceptbool, default=True

是否計算此模型的截距。 如果設定為 false,則計算中不會使用截距 (即預期資料是居中的)。

precompute‘auto’, bool 或 shape 為 (n_features, n_features) 的 array-like, default=‘auto’

是否使用預先計算的格拉姆矩陣來加速計算。 如果設定為 'auto',則由我們決定。 格拉姆矩陣也可以作為參數傳遞。

max_iterint, default=1000

最大迭代次數。

tolfloat, default=1e-4

優化的容差: 如果更新小於 tol,則優化程式碼會檢查對偶間隙是否為最佳,並繼續執行直到小於 tol

cvint, 交叉驗證產生器或可迭代物件, default=None

決定交叉驗證分割策略。 cv 的可能輸入為

  • None,使用預設的 5 折交叉驗證。

  • int,指定摺疊次數。

  • CV 分割器,

  • 一個產生 (訓練, 測試) 分割作為索引陣列的可迭代物件。

對於 int/None 輸入,將使用 KFold

請參閱 使用者指南,了解此處可使用的各種交叉驗證策略。

在 0.22 版本中變更: 如果為 None,cv 的預設值從 3 折變為 5 折。

copy_Xbool, default=True

如果 True,則會複製 X;否則,可能會覆寫它。

verbosebool 或 int, default=0

訊息量。

n_jobsint, default=None

交叉驗證期間要使用的 CPU 數量。 None 表示 1,除非在 joblib.parallel_backend 環境中。 -1 表示使用所有處理器。 有關更多詳細資訊,請參閱 詞彙表

positivebool, default=False

當設定為 True 時,強制係數為正數。

random_stateint, RandomState 實例, default=None

選擇要更新的隨機特徵的偽隨機數產生器的種子。 當 selection == 'random' 時使用。 傳遞一個 int 以便在多個函式呼叫之間獲得可重現的輸出。 請參閱 詞彙表

selection{‘cyclic’, ‘random’}, default=‘cyclic’

如果設定為 'random',則每次迭代都會更新一個隨機係數,而不是預設按順序循環處理特徵。 這 (設定為 'random') 通常會導致顯著更快的收斂速度,特別是當 tol 高於 1e-4 時。

屬性:
alpha_float

交叉驗證選擇的懲罰量。

l1_ratio_float

交叉驗證選擇的 L1 和 L2 懲罰之間的權衡。

coef_shape 為 (n_features,) 或 (n_targets, n_features) 的 ndarray

參數向量 (成本函式公式中的 w)。

intercept_float 或 shape 為 (n_targets, n_features) 的 ndarray

決策函式中的獨立項。

mse_path_shape 為 (n_l1_ratio, n_alpha, n_folds) 的 ndarray

測試集中每個摺疊的均方誤差,變化 l1_ratio 和 alpha。

alphas_shape 為 (n_alphas,) 或 (n_l1_ratio, n_alphas) 的 ndarray

用於擬合的 alpha 格網,針對每個 l1_ratio。

dual_gap_float

最佳 alpha 優化結束時的對偶間隙。

n_iter_int

座標下降求解器為達到最佳 alpha 的指定容差而運行的迭代次數。

n_features_in_int

fit 期間看到的特徵數量。

於 0.24 版本新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

於 1.0 版本新增。

另請參閱

enet_path

使用座標下降法計算彈性網路路徑。

ElasticNet

使用 L1 和 L2 先驗組合作為正規化器的線性迴歸。

註解

fit 中,一旦透過交叉驗證找到最佳參數 l1_ratioalpha,則會使用整個訓練集再次擬合模型。

為了避免不必要的記憶體重複,fit 方法的 X 參數應該直接作為 Fortran 相鄰的 NumPy 陣列傳遞。

參數 l1_ratio 對應於 glmnet R 套件中的 alpha,而 alpha 對應於 glmnet 中的 lambda 參數。更具體地說,最佳化目標是

1 / (2 * n_samples) * ||y - Xw||^2_2
+ alpha * l1_ratio * ||w||_1
+ 0.5 * alpha * (1 - l1_ratio) * ||w||^2_2

如果您有興趣單獨控制 L1 和 L2 懲罰,請記住這等效於

a * L1 + b * L2

對於

alpha = a + b and l1_ratio = a / (a + b).

有關範例,請參閱 examples/linear_model/plot_lasso_model_selection.py

範例

>>> from sklearn.linear_model import ElasticNetCV
>>> from sklearn.datasets import make_regression
>>> X, y = make_regression(n_features=2, random_state=0)
>>> regr = ElasticNetCV(cv=5, random_state=0)
>>> regr.fit(X, y)
ElasticNetCV(cv=5, random_state=0)
>>> print(regr.alpha_)
0.199...
>>> print(regr.intercept_)
0.398...
>>> print(regr.predict([[0, 0]]))
[0.398...]
fit(X, y, sample_weight=None, **params)[原始碼]#

使用座標下降法擬合 ElasticNet 模型。

擬合是在 alpha 的網格上進行的,並且最佳 alpha 是透過交叉驗證估算的。

參數:
X形狀為 (n_samples, n_features) 的類陣列、稀疏矩陣

訓練資料。直接以 Fortran 相鄰的資料傳遞,以避免不必要的記憶體重複。如果 y 是單一輸出,則 X 可以是稀疏的。請注意,不接受需要 int64 索引的大型稀疏矩陣和陣列。

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

目標值。

sample_weightfloat 或形狀為 (n_samples,) 的類陣列,預設值為 None

用於擬合和評估每個 cv 折疊的加權均方誤差的樣本權重。請注意,最終用於尋找最佳模型的交叉驗證 MSE 是每個測試折疊的(加權)MSE 的未加權平均值。

**paramsdict,預設值為 None

要傳遞給 CV 分割器的參數。

於 1.4 版本新增:僅在 enable_metadata_routing=True 時可用,可以使用 sklearn.set_config(enable_metadata_routing=True) 設定。有關詳細資訊,請參閱 Metadata Routing 使用者指南

傳回值:
self物件

傳回已擬合模型的實例。

get_metadata_routing()[原始碼]#

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

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

於 1.4 版本新增。

傳回值:
routingMetadataRouter

一個封裝路由資訊的 MetadataRouter

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

取得此估算器的參數。

參數:
deepbool,預設值為 True

如果為 True,將傳回此估算器的參數和包含的子物件,這些子物件是估算器。

傳回值:
paramsdict

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

static path(X, y, *, l1_ratio=0.5, eps=0.001, n_alphas=100, alphas=None, precompute='auto', Xy=None, copy_X=True, coef_init=None, verbose=False, return_n_iter=False, positive=False, check_input=True, **params)[原始碼]#

使用座標下降法計算彈性網路路徑。

彈性網路的最佳化函數對於單一輸出和多個輸出有所不同。

對於單一輸出任務,它是

1 / (2 * n_samples) * ||y - Xw||^2_2
+ alpha * l1_ratio * ||w||_1
+ 0.5 * alpha * (1 - l1_ratio) * ||w||^2_2

對於多個輸出任務,它是

(1 / (2 * n_samples)) * ||Y - XW||_Fro^2
+ alpha * l1_ratio * ||W||_21
+ 0.5 * alpha * (1 - l1_ratio) * ||W||_Fro^2

其中

||W||_21 = \sum_i \sqrt{\sum_j w_{ij}^2}

即每個列的範數總和。

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

參數:
X形狀為 (n_samples, n_features) 的類陣列、稀疏矩陣

訓練資料。直接以 Fortran 相鄰的資料傳遞,以避免不必要的記憶體重複。如果 y 是單一輸出,則 X 可以是稀疏的。

y形狀為 (n_samples,) 或 (n_samples, n_targets) 的類陣列、稀疏矩陣

目標值。

l1_ratiofloat,預設值為 0.5

傳遞給彈性網路的 0 到 1 之間的數字(l1 和 l2 懲罰之間的縮放)。l1_ratio=1 對應於 Lasso。

epsfloat, default=1e-3

路徑長度。 eps=1e-3 表示 alpha_min / alpha_max = 1e-3

n_alphasint, default=100

沿正規化路徑的 alpha 數量。

alphasarray-like, default=None

計算模型的 alpha 列表。 如果為 None,則會自動設定 alpha。

precompute‘auto’, bool 或 shape 為 (n_features, n_features) 的 array-like, default=‘auto’

是否使用預先計算的格拉姆矩陣來加速計算。 如果設定為 'auto',則由我們決定。 格拉姆矩陣也可以作為參數傳遞。

Xy形狀為 (n_features,) 或 (n_features, n_targets) 的類陣列,預設值為 None

可以預先計算的 Xy = np.dot(X.T, y)。僅在預先計算格拉姆矩陣時才有用。

copy_Xbool, default=True

如果 True,則會複製 X;否則,可能會覆寫它。

coef_init形狀為 (n_features, ) 的類陣列,預設值為 None

係數的初始值。

verbosebool 或 int,預設值為 False

訊息量。

return_n_iterbool,預設值為 False

是否傳回迭代次數。

positivebool, default=False

如果設定為 True,則強制係數為正數。(僅在 y.ndim == 1 時允許)。

check_inputbool,預設值為 True

如果設定為 False,則會跳過輸入驗證檢查(包括提供的格拉姆矩陣)。假設它們由呼叫者處理。

**paramskwargs

傳遞給座標下降求解器的關鍵字引數。

傳回值:
alphas形狀為 (n_alphas,) 的 ndarray

沿著計算模型路徑的 alpha。

coefs形狀為 (n_features, n_alphas) 或 (n_targets, n_features, n_alphas) 的 ndarray

沿著路徑的係數。

dual_gaps形狀為 (n_alphas,) 的 ndarray

每個 alpha 的最佳化結束時的對偶間隙。

n_itersint 的列表

座標下降最佳化器達到每個 alpha 指定容差所採取的迭代次數。(當 return_n_iter 設定為 True 時傳回)。

另請參閱

MultiTaskElasticNet

使用 L1/L2 混合範數作為正規化器訓練的多任務彈性網路模型。

MultiTaskElasticNetCV

具有內建交叉驗證的多任務 L1/L2 彈性網路。

ElasticNet

使用 L1 和 L2 先驗組合作為正規化器的線性迴歸。

ElasticNetCV

彈性網路模型,沿著正規化路徑進行迭代擬合。

註解

有關範例,請參閱 examples/linear_model/plot_lasso_lasso_lars_elasticnet_path.py

範例

>>> from sklearn.linear_model import enet_path
>>> from sklearn.datasets import make_regression
>>> X, y, true_coef = make_regression(
...    n_samples=100, n_features=5, n_informative=2, coef=True, random_state=0
... )
>>> true_coef
array([ 0.        ,  0.        ,  0.        , 97.9..., 45.7...])
>>> alphas, estimated_coef, _ = enet_path(X, y, n_alphas=3)
>>> alphas.shape
(3,)
>>> estimated_coef
 array([[ 0.        ,  0.78...,  0.56...],
        [ 0.        ,  1.12...,  0.61...],
        [-0.        , -2.12..., -1.12...],
        [ 0.        , 23.04..., 88.93...],
        [ 0.        , 10.63..., 41.56...]])
predict(X)[原始碼]#

使用線性模型進行預測。

參數:
X類陣列或稀疏矩陣,形狀為 (n_samples, n_features)

樣本。

傳回值:
C陣列,形狀為 (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。

參數:
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

樣本權重。

傳回值:
score浮點數

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$') ElasticNetCV[原始碼]#

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

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

每個參數的選項為

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

  • False:不請求中繼資料,且 meta-estimator 不會將其傳遞給 fit

  • None:不請求中繼資料,且如果使用者提供中繼資料,meta-estimator 會引發錯誤。

  • str:中繼資料應該以給定的別名(而不是原始名稱)傳遞給 meta-estimator。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 保留現有的請求。這讓您可以變更某些參數的請求,而其他參數則不變。

在 1.3 版中新增。

注意

只有當此估計器用作 meta-estimator 的子估計器時,此方法才相關,例如在 Pipeline 中使用。否則,它沒有任何效果。

參數:
sample_weight字串、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

fitsample_weight 參數的中繼資料路由。

傳回值:
self物件

更新後的物件。

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

設定此估計器的參數。

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

參數:
**params字典

估計器參數。

傳回值:
self估計器實例

估計器實例。

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

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

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

每個參數的選項為

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

  • False:不請求中繼資料,且 meta-estimator 不會將其傳遞給 score

  • None:不請求中繼資料,且如果使用者提供中繼資料,meta-estimator 會引發錯誤。

  • str:中繼資料應該以給定的別名(而不是原始名稱)傳遞給 meta-estimator。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 保留現有的請求。這讓您可以變更某些參數的請求,而其他參數則不變。

在 1.3 版中新增。

注意

只有當此估計器用作 meta-estimator 的子估計器時,此方法才相關,例如在 Pipeline 中使用。否則,它沒有任何效果。

參數:
sample_weight字串、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

scoresample_weight 參數的中繼資料路由。

傳回值:
self物件

更新後的物件。