LogisticRegressionCV#

class sklearn.linear_model.LogisticRegressionCV(*, Cs=10, fit_intercept=True, cv=None, dual=False, penalty='l2', scoring=None, solver='lbfgs', tol=0.0001, max_iter=100, class_weight=None, n_jobs=None, verbose=0, refit=True, intercept_scaling=1.0, multi_class='deprecated', random_state=None, l1_ratios=None)[來源]#

Logistic Regression CV(又稱 logit, MaxEnt)分類器。

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

此類別使用 liblinear、newton-cg、sag 或 lbfgs 優化器實現邏輯回歸。newton-cg、sag 和 lbfgs 解算器僅支援使用原始公式的 L2 正規化。liblinear 解算器支援 L1 和 L2 正規化,僅對 L2 懲罰使用對偶公式。彈性網路懲罰僅由 saga 解算器支援。

對於 Cs 值和 l1_ratios 值的網格,最佳超參數由交叉驗證器 StratifiedKFold 選取,但可以使用 cv 參數進行變更。「newton-cg」、「sag」、「saga」和「lbfgs」解算器可以熱啟動係數(請參閱 詞彙表)。

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

參數:
Csint 或浮點數列表,預設值=10

Cs 中的每個值都描述了正規化強度的倒數。如果 Cs 是整數,則會在 1e-4 到 1e4 之間以對數尺度選擇 Cs 值的網格。與支援向量機一樣,較小的值指定較強的正規化。

fit_interceptbool,預設值=True

指定是否應將常數(又稱偏差或截距)新增至決策函數。

cvint 或交叉驗證產生器,預設值=None

使用的預設交叉驗證產生器是分層 K 折。如果提供整數,則它是使用的折疊次數。有關可能的交叉驗證物件清單,請參閱 sklearn.model_selection 模組。

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

dualbool,預設值=False

對偶(受約束)或原始(正規化,另請參閱 此方程式)公式。對偶公式僅針對 liblinear 解算器的 l2 懲罰實作。當 n_samples > n_features 時,最好使用 dual=False。

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

指定懲罰的範數

  • 'l2': 新增 L2 懲罰項(預設使用);

  • 'l1': 新增 L1 懲罰項;

  • 'elasticnet': 新增 L1 和 L2 懲罰項。

警告

某些懲罰可能不適用於某些解算器。請參閱下面的參數 solver,以瞭解懲罰和解算器之間的相容性。

scoringstr 或可呼叫物件,預設值=None

字串(請參閱評分參數:定義模型評估規則)或具有簽名 scorer(estimator, X, y) 的評分器可呼叫物件/函數。如需可使用的評分函數清單,請查看 sklearn.metrics。使用的預設評分選項是「accuracy」。

solver{‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’},預設值=’lbfgs’

在最佳化問題中使用的演算法。預設值是「lbfgs」。若要選擇解算器,您可能需要考量以下幾個方面

  • 對於小型資料集,「liblinear」是不錯的選擇,而「sag」和「saga」對於大型資料集速度更快;

  • 對於多類別問題,除了「liblinear」以外的所有解算器都會最小化完整的多項損失;

  • 「liblinear」在 LogisticRegressionCV 中可能會較慢,因為它不處理熱啟動。

  • 預設情況下,「liblinear」只能處理二元分類。若要針對多類別設定套用一對多的方案,可以使用 OneVsRestClassifier 進行包裝。

  • n_samples >> n_features * n_classes 時,「newton-cholesky」是一個不錯的選擇,尤其是在具有稀有類別的 one-hot 編碼分類特徵的情況下。請注意,此求解器的記憶體使用量與 n_features * n_classes 呈二次方依賴關係,因為它會明確地計算完整的 Hessian 矩陣。

警告

演算法的選擇取決於所選的懲罰項以及是否支援(多項式)多類別。

求解器 (solver)

懲罰項 (penalty)

多項式多類別 (multinomial multiclass)

‘lbfgs’

‘l2’

是 (yes)

‘liblinear’

‘l1’, ‘l2’

否 (no)

‘newton-cg’

‘l2’

是 (yes)

‘newton-cholesky’

‘l2’,

否 (no)

‘sag’

‘l2’,

是 (yes)

‘saga’

‘elasticnet’, ‘l1’, ‘l2’

是 (yes)

注意

僅當特徵具有大致相同的尺度時,才能保證 ‘sag’ 和 ‘saga’ 快速收斂。您可以使用來自 sklearn.preprocessing 的縮放器預處理數據。

0.17 版本新增: 隨機平均梯度下降求解器。

0.19 版本新增: SAGA 求解器。

1.2 版本新增: newton-cholesky 求解器。

tolfloat,預設值=1e-4

停止條件的容差。

max_iterint,預設值=100

優化演算法的最大迭代次數。

class_weightdict 或 ‘balanced’,預設值=None

與類別相關聯的權重,格式為 {類別標籤: 權重}。如果未給定,則假定所有類別的權重均為 1。

「balanced」模式使用 y 的值來自動調整權重,權重與輸入資料中類別頻率成反比,計算方式為 n_samples / (n_classes * np.bincount(y))

請注意,如果指定了 sample_weight,這些權重將與 sample_weight(透過 fit 方法傳遞)相乘。

0.17 版本新增: class_weight == ‘balanced’

n_jobsint,預設值=None

在交叉驗證迴圈期間使用的 CPU 核心數。None 表示 1,除非在 joblib.parallel_backend 內容中。-1 表示使用所有處理器。有關詳細資訊,請參閱詞彙表

verboseint,預設值=0

對於 ‘liblinear’、‘sag’ 和 ‘lbfgs’ 求解器,將 verbose 設定為任何正數以顯示詳細資訊。

refitbool,預設值=True

如果設定為 True,則會平均所有折疊的分數,並採用對應於最佳分數的係數和 C,並使用這些參數進行最終的重新擬合。否則,會平均所有折疊中對應於最佳分數的係數、截距和 C。

intercept_scalingfloat,預設值=1

僅當使用求解器 ‘liblinear’ 並且 self.fit_intercept 設定為 True 時才有用。在這種情況下,x 變成 [x, self.intercept_scaling],即將一個常數值等於 intercept_scaling 的「合成」特徵附加到實例向量。截距變成 intercept_scaling * 合成特徵權重

注意!與所有其他特徵一樣,合成特徵權重會受到 l1/l2 正規化的約束。為了減輕正規化對合成特徵權重(以及因此對截距)的影響,必須增加 intercept_scaling。

multi_class{‘auto, ‘ovr’, ‘multinomial’},預設值=‘auto’

如果選擇的選項是 ‘ovr’,則為每個標籤擬合一個二元問題。對於 ‘multinomial’,最小化的損失是在整個機率分佈上擬合的多項式損失,即使數據是二元的。當 solver=’liblinear’ 時,‘multinomial’ 不可用。如果數據是二元的,或者 solver=’liblinear’,則 ‘auto’ 選擇 ‘ovr’,否則選擇 ‘multinomial’。

0.18 版本新增: 用於 ‘multinomial’ 的隨機平均梯度下降求解器。

0.22 版本變更: 預設值在 0.22 中從 ‘ovr’ 更改為 ‘auto’。

自 1.5 版本起已棄用: multi_class 已在 1.5 版本中棄用,並將在 1.7 版本中移除。從那時起,對於 n_classes >= 3,將始終使用建議的 ‘multinomial’。不支援 ‘multinomial’ 的求解器將會引發錯誤。如果您仍然想使用 OvR,請使用 sklearn.multiclass.OneVsRestClassifier(LogisticRegressionCV())

random_stateint、RandomState 實例,預設值=None

solver='sag'、‘saga’ 或 ‘liblinear’ 時用於打亂數據。請注意,這僅適用於求解器,不適用於交叉驗證產生器。有關詳細資訊,請參閱詞彙表

l1_ratiosfloat 列表,預設值=None

Elastic-Net 混合參數列表,其中 0 <= l1_ratio <= 1。僅當 penalty='elasticnet' 時使用。值 0 等同於使用 penalty='l2',而值 1 等同於使用 penalty='l1'。對於 0 < l1_ratio <1,懲罰是 L1 和 L2 的組合。

屬性:
classes_形狀為 (n_classes, ) 的 ndarray

分類器已知的類別標籤列表。

coef_形狀為 (1, n_features) 或 (n_classes, n_features) 的 ndarray

決策函數中特徵的係數。

當給定的問題是二元問題時,coef_ 的形狀為 (1, n_features)。

intercept_形狀為 (1,) 或 (n_classes,) 的 ndarray

添加到決策函數的截距(又稱偏差)。

如果 fit_intercept 設定為 False,則截距設定為零。當問題是二元問題時,intercept_ 的形狀為 (1,)。

Cs_形狀為 (n_cs) 的 ndarray

用於交叉驗證的 C(即正規化參數的倒數)值的數組。

l1_ratios_形狀為 (n_l1_ratios) 的 ndarray

用於交叉驗證的 l1_ratios 數組。如果未使用 l1_ratio(即 penalty 不是 ‘elasticnet’),則此設定為 [None]

coefs_paths_形狀為 (n_folds, n_cs, n_features) 或 (n_folds, n_cs, n_features + 1) 的 ndarray

以類別作為鍵的字典,值是在每個折疊中進行交叉驗證,然後在每個 C 後為對應類別進行 OvR 後獲得的係數路徑。如果 ‘multi_class’ 選項設定為 ‘multinomial’,則 coefs_paths 是對應於每個類別的係數。每個字典值的形狀為 (n_folds, n_cs, n_features)(n_folds, n_cs, n_features + 1),具體取決於是否擬合截距。如果 penalty='elasticnet',則形狀為 (n_folds, n_cs, n_l1_ratios_, n_features)(n_folds, n_cs, n_l1_ratios_, n_features + 1)

scores_字典

以類別作為鍵的字典,值是在對應類別執行 OvR 後,在交叉驗證每個折疊期間獲得的分數網格。如果給定的 ‘multi_class’ 選項是 ‘multinomial’,則所有類別都重複相同的分數,因為這是多項式類別。每個字典值的形狀為 (n_folds, n_cs)(n_folds, n_cs, n_l1_ratios)(如果 penalty='elasticnet')。

C_形狀為 (n_classes,) 或 (n_classes - 1,) 的 ndarray

映射到每個類別中最佳分數的 C 數組。如果 refit 設定為 False,則對於每個類別,最佳 C 是對應於每個折疊最佳分數的 C 的平均值。當問題是二元問題時,C_ 的形狀為 (n_classes,)。

l1_ratio_形狀為 (n_classes,) 或 (n_classes - 1,) 的 ndarray

映射到每個類別中最佳分數的 l1_ratio 數組。如果 refit 設定為 False,則對於每個類別,最佳 l1_ratio 是對應於每個折疊最佳分數的 l1_ratio 的平均值。當問題是二元問題時,l1_ratio_ 的形狀為 (n_classes,)。

n_iter_形狀為 (n_classes, n_folds, n_cs) 或 (1, n_folds, n_cs) 的 ndarray

所有類別、折疊和 C 的實際迭代次數。在二元或多項式情況下,第一個維度等於 1。如果 penalty='elasticnet',則形狀為 (n_classes, n_folds, n_cs, n_l1_ratios)(1, n_folds, n_cs, n_l1_ratios)

n_features_in_int

fit 期間看到的特徵數量。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

在 1.0 版本中新增。

另請參閱

LogisticRegression

不調整超參數 C 的邏輯迴歸。

範例

>>> from sklearn.datasets import load_iris
>>> from sklearn.linear_model import LogisticRegressionCV
>>> X, y = load_iris(return_X_y=True)
>>> clf = LogisticRegressionCV(cv=5, random_state=0).fit(X, y)
>>> clf.predict(X[:2, :])
array([0, 0])
>>> clf.predict_proba(X[:2, :]).shape
(2, 3)
>>> clf.score(X, y)
0.98...
decision_function(X)[原始碼]#

預測樣本的信賴分數。

樣本的信賴分數與該樣本到超平面的有符號距離成正比。

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

我們想要取得信賴分數的資料矩陣。

回傳值:
scores形狀為 (n_samples,) 或 (n_samples, n_classes) 的 ndarray

每個 (n_samples, n_classes) 組合的信賴分數。在二元情況下,self.classes_[1] 的信賴分數,其中 >0 表示將會預測此類別。

densify()[原始碼]#

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

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

回傳值:
self

已擬合的估計器。

fit(X, y, sample_weight=None, **params)[原始碼]#

根據給定的訓練資料擬合模型。

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

訓練向量,其中 n_samples 是樣本數,而 n_features 是特徵數。

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

相對於 X 的目標向量。

sample_weight形狀為 (n_samples,) 的類陣列,預設為 None

分配給各個樣本的權重陣列。如果未提供,則每個樣本都會給予單位權重。

**paramsdict

要傳遞給底層分割器和評分器的參數。

在 1.4 版本中新增。

回傳值:
selfobject

已擬合的 LogisticRegressionCV 估計器。

get_metadata_routing()[原始碼]#

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

請查看關於路由機制如何運作的使用者指南

在 1.4 版本中新增。

回傳值:
routingMetadataRouter

封裝路由資訊的MetadataRouter

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

取得此估計器的參數。

參數:
deepbool,預設為 True

如果為 True,則會回傳此估計器和所包含的、身為估計器的子物件的參數。

回傳值:
paramsdict

對應到其值的參數名稱。

predict(X)[原始碼]#

預測 X 中樣本的類別標籤。

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

我們想要取得預測值的資料矩陣。

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

包含每個樣本類別標籤的向量。

predict_log_proba(X)[原始碼]#

預測機率估計值的對數。

所有類別的回傳估計值會依類別標籤排序。

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

要評分的向量,其中 n_samples 是樣本數,而 n_features 是特徵數。

回傳值:
T形狀為 (n_samples, n_classes) 的類陣列

回傳模型中每個類別的樣本對數機率,其中類別的排序方式與 self.classes_ 中的排序方式相同。

predict_proba(X)[原始碼]#

機率估計值。

所有類別的回傳估計值會依類別標籤排序。

對於多類別問題,如果 multi_class 設定為「多項式」,則會使用 softmax 函數來找出每個類別的預測機率。否則,使用一對餘方法,即使用邏輯函數計算每個類別為正的機率,並將這些值在所有類別中正規化。

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

要評分的向量,其中 n_samples 是樣本數,而 n_features 是特徵數。

回傳值:
T形狀為 (n_samples, n_classes) 的類陣列

回傳模型中每個類別的樣本機率,其中類別的排序方式與 self.classes_ 中的排序方式相同。

score(X, y, sample_weight=None, **score_params)[原始碼]#

使用給定測試資料和標籤上的 scoring 選項進行評分。

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

測試樣本。

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

X 的真實標籤。

sample_weight形狀為 (n_samples,) 的類陣列,預設為 None

樣本權重。

**score_paramsdict

要傳遞給底層評分器的 score 方法的參數。

在 1.4 版本中新增。

回傳值:
scorefloat

self.predict(X) 相對於 y 的分數。

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

請求傳遞至 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

fitsample_weight 參數的元數據路由。

回傳值:
selfobject

更新後的物件。

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

設定此估計器的參數。

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

參數:
**paramsdict

估計器參數。

回傳值:
self估計器實例

估計器實例。

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

要求傳遞至 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 參數的元數據路由。

回傳值:
selfobject

更新後的物件。

sparsify()[原始碼]#

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

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

intercept_ 成員不會轉換。

回傳值:
self

已擬合的估計器。

注意事項

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

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