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
fit
中sample_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
score
中sample_weight
參數的元數據路由。
- 回傳值:
- selfobject
更新後的物件。
- sparsify()[原始碼]#
將係數矩陣轉換為稀疏格式。
將
coef_
成員轉換為 scipy.sparse 矩陣,對於 L1 正規化的模型,這比通常的 numpy.ndarray 表示法更節省記憶體和儲存空間。intercept_
成員不會轉換。- 回傳值:
- self
已擬合的估計器。
注意事項
對於非稀疏模型,即當
coef_
中沒有很多零時,這實際上可能會增加記憶體使用量,因此請謹慎使用此方法。一個經驗法則是,零元素的數量(可以使用(coef_ == 0).sum()
計算),必須超過 50% 才能提供顯著的好處。呼叫此方法後,在使用 partial_fit 方法進行進一步擬合(如果有的話)之前,將無法運作,直到您呼叫 densify。