邏輯回歸#

class sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='deprecated', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)[原始碼]#

邏輯回歸(又稱logit,MaxEnt)分類器。

此類別使用 ‘liblinear’ 庫、 ‘newton-cg’、 ‘sag’、 ‘saga’ 和 ‘lbfgs’ 解算器實現正規化的邏輯回歸。請注意,預設情況下會應用正規化。它可以處理密集和稀疏輸入。使用 C 順序陣列或包含 64 位浮點數的 CSR 矩陣以獲得最佳效能;任何其他輸入格式都將被轉換(和複製)。

‘newton-cg’、‘sag’ 和 ‘lbfgs’ 解算器僅支援使用原始公式的 L2 正規化,或不進行正規化。 ‘liblinear’ 解算器支援 L1 和 L2 正規化,僅在 L2 懲罰下使用對偶公式。彈性網路(Elastic-Net)正規化僅受 ‘saga’ 解算器支援。

對於多類別問題,只有 ‘newton-cg’、 ‘sag’、 ‘saga’ 和 ‘lbfgs’ 處理多項式損失。 ‘liblinear’ 和 ‘newton-cholesky’ 僅處理二元分類,但可以透過使用 OneVsRestClassifier 來擴展以處理多類別。

使用者指南中閱讀更多內容。

參數:
penalty{‘l1’, ‘l2’, ‘elasticnet’, None}, default=’l2’

指定懲罰的範數

  • None:不添加懲罰;

  • 'l2':添加 L2 懲罰項,這是預設選項;

  • 'l1':添加 L1 懲罰項;

  • 'elasticnet':同時添加 L1 和 L2 懲罰項。

警告

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

在 0.19 版本中新增: 使用 SAGA 解算器的 l1 懲罰(允許 ‘multinomial’ + L1)

dualbool, default=False

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

tolfloat, default=1e-4

停止條件的容差。

Cfloat, default=1.0

正規化強度的倒數;必須是正浮點數。與支援向量機類似,較小的值指定較強的正規化。

fit_interceptbool, default=True

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

intercept_scalingfloat, default=1

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

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

class_weightdict 或 ‘balanced’, default=None

與類別相關的權重,格式為 {class_label: weight}。如果未指定,則假設所有類別的權重為 1。

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

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

在 0.17 版本中新增: class_weight='balanced'

random_stateint, RandomState 實例, default=None

solver == ‘sag’、‘saga’ 或 ‘liblinear’ 時,用於混洗資料。詳情請參閱詞彙表

solver{‘lbfgs’, ‘liblinear’, ‘newton-cg’, ‘newton-cholesky’, ‘sag’, ‘saga’}, default=’lbfgs’

用於最佳化問題的演算法。預設為 ‘lbfgs’。若要選擇解算器,您可能需要考慮以下幾個方面:

  • 對於小型資料集,‘liblinear’ 是一個不錯的選擇,而 ‘sag’ 和 ‘saga’ 對於大型資料集則更快;

  • 對於多類別問題,除了 ‘liblinear’ 之外的所有解算器都最小化完整的多項式損失;

  • 預設情況下,‘liblinear’ 只能處理二元分類。若要將一對餘 (one-versus-rest) 方案應用於多類別設定,可以使用 OneVsRestClassifier 將其包裝起來。

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

警告

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

求解器

懲罰

多項式多類別

‘lbfgs’

‘l2’、None

‘liblinear’

‘l1’、‘l2’

‘newton-cg’

‘l2’、None

‘newton-cholesky’

‘l2’、None

‘sag’

‘l2’、None

‘saga’

‘elasticnet’、‘l1’、‘l2’、None

注意

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

另請參閱

請參閱 使用者指南,以取得有關 LogisticRegression 的更多資訊,更具體地說,請參閱總結求解器/懲罰支援的表格

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

在 0.19 版本中新增:SAGA 求解器。

在 0.22 版本中變更:預設求解器在 0.22 版本中從 ‘liblinear’ 變更為 ‘lbfgs’。

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

max_iterint,預設值=100

求解器收斂所採取的最大迭代次數。

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 版本中移除。從那時起,建議的 ‘multinomial’ 將始終用於 n_classes >= 3。不支援 ‘multinomial’ 的求解器會引發錯誤。如果您仍然想使用 OvR,請使用 sklearn.multiclass.OneVsRestClassifier(LogisticRegression())

verboseint,預設值=0

對於 liblinear 和 lbfgs 求解器,將 verbose 設定為任何正數即可啟用詳細模式。

warm_startbool,預設值=False

設定為 True 時,會重複使用先前呼叫 fit 的解決方案作為初始化,否則,只會清除先前的解決方案。對於 liblinear 求解器無用。請參閱詞彙表

在 0.17 版本中新增:warm_start 以支援 lbfgsnewton-cgsagsaga 求解器。

n_jobsint,預設值=None

當 multi_class='ovr' 時,在類別上平行化時使用的 CPU 核心數。無論是否指定 ‘multi_class’,當 solver 設定為 ‘liblinear’ 時,都會忽略此參數。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。請參閱詞彙表以取得更多詳細資訊。

l1_ratiofloat,預設值=None

Elastic-Net 混合參數,其中 0 <= l1_ratio <= 1。僅當 penalty='elasticnet' 時使用。設定 l1_ratio=0 等效於使用 penalty='l2',而設定 l1_ratio=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)。特別是,當 multi_class='multinomial' 時,coef_ 對應於結果 1 (True),而 -coef_ 對應於結果 0 (False)。

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

新增到決策函數的截距(又名偏差)。

如果 fit_intercept 設定為 False,則截距設定為零。當給定的問題是二元時,intercept_ 的形狀為 (1,)。特別是,當 multi_class='multinomial' 時,intercept_ 對應於結果 1 (True),而 -intercept_ 對應於結果 0 (False)。

n_features_in_int

fit 期間看到的特徵數量。

在 0.24 版本中新增。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

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

於 1.0 版本新增。

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

所有類別的實際迭代次數。如果是二元或多項式,則僅返回 1 個元素。對於 liblinear 求解器,僅給出所有類別的最大迭代次數。

在 0.20 版本中變更: 在 SciPy <= 1.0.0 中,lbfgs 迭代次數可能超過 max_itern_iter_ 現在最多會報告 max_iter

另請參閱

SGDClassifier

增量訓練的邏輯迴歸 (當給定參數 loss="log_loss" 時)。

LogisticRegressionCV

具有內建交叉驗證的邏輯迴歸。

注意事項

底層的 C 實作使用亂數產生器在擬合模型時選擇特徵。因此,對於相同的輸入資料,得到稍微不同的結果並不罕見。如果發生這種情況,請嘗試使用較小的 tol 參數。

在某些情況下,預測輸出可能與獨立的 liblinear 不符。請參閱敘述性文件中 與 liblinear 的差異

參考文獻

L-BFGS-B – 用於大規模約束最佳化的軟體

Ciyou Zhu、Richard Byrd、Jorge Nocedal 和 Jose Luis Morales。http://users.iems.northwestern.edu/~nocedal/lbfgsb.html

LIBLINEAR – 用於大型線性分類的函式庫

https://www.csie.ntu.edu.tw/~cjlin/liblinear/

SAG – Mark Schmidt、Nicolas Le Roux 和 Francis Bach

使用隨機平均梯度最小化有限和 https://hal.inria.fr/hal-00860051/document

SAGA – Defazio, A.、Bach F. & Lacoste-Julien S. (2014)。

“SAGA: 一種快速的增量梯度方法,支援非強凸複合目標”

Hsiang-Fu Yu、Fang-Lan Huang、Chih-Jen Lin (2011)。用於邏輯迴歸和最大熵模型的對偶座標下降法。機器學習 85(1-2):41-75。https://www.csie.ntu.edu.tw/~cjlin/papers/maxent_dual.pdf

For a comaprison of the LogisticRegression with other classifiers see: Plot classification probability.

範例

>>> from sklearn.datasets import load_iris
>>> from sklearn.linear_model import LogisticRegression
>>> X, y = load_iris(return_X_y=True)
>>> clf = LogisticRegression(random_state=0).fit(X, y)
>>> clf.predict(X[:2, :])
array([0, 0])
>>> clf.predict_proba(X[:2, :])
array([[9.8...e-01, 1.8...e-02, 1.4...e-08],
       [9.7...e-01, 2.8...e-02, ...e-08]])
>>> clf.score(X, y)
0.97...

若要比較 LogisticRegression 與其他分類器,請參閱:繪製分類機率圖

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

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

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

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

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

相對於 X 的目標向量。

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

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

於 0.17 版本新增: sample_weight 對 LogisticRegression 的支援。

回傳值:
self

已擬合的估計器。

注意事項

SAGA 求解器同時支援 float64 和 float32 位元陣列。

get_metadata_routing()[原始碼]#

取得此物件的元資料路由。

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

回傳值:
routingMetadataRequest

一個 MetadataRequest 封裝路由資訊。

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) 的類陣列(array-like)

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

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

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

predict_proba(X)[原始碼]#

機率估計值。

所有類別的返回估計值會按照類別標籤排序。

對於多類別問題,如果 multi_class 設定為“multinomial”,則使用 softmax 函數來找到每個類別的預測機率。否則使用一對其餘的方法,即使用邏輯函數計算每個類別假設為正的機率,並將這些值在所有類別中歸一化。

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

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

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

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

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

返回給定測試資料和標籤的平均準確度。

在多標籤分類中,這是子集準確度,這是一個嚴苛的度量標準,因為您需要正確預測每個樣本的每個標籤集。

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

測試樣本。

y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列(array-like)

X 的真實標籤。

sample_weight形狀為 (n_samples,) 的類陣列(array-like),預設值為 None

樣本權重。

回傳值:
scorefloat

相對於 yself.predict(X) 的平均準確度。

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

請求傳遞至 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 參數的中繼資料路由。

回傳值:
self物件

已更新的物件。

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

設定此估計器的參數。

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

參數:
**paramsdict

估算器的參數。

回傳值:
self估算器實例

估算器實例。

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

請求傳遞給 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 參數的中繼資料路由。

回傳值:
self物件

已更新的物件。

sparsify()[原始碼]#

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

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

intercept_ 成員不會轉換。

回傳值:
self

已擬合的估計器。

注意事項

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

呼叫此方法後,除非您呼叫 densify,否則使用 partial_fit 方法(如果有的話)進行進一步擬合將無法運作。