邏輯回歸#
- 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 以支援 lbfgs、newton-cg、sag、saga 求解器。
- 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_iter
。n_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 – 用於大型線性分類的函式庫
- SAG – Mark Schmidt、Nicolas Le Roux 和 Francis Bach
使用隨機平均梯度最小化有限和 https://hal.inria.fr/hal-00860051/document
- SAGA – Defazio, A.、Bach F. & Lacoste-Julien S. (2014)。
- 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
相對於
y
的self.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
用於
fit
中sample_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
用於
score
中sample_weight
參數的中繼資料路由。
- 回傳值:
- self物件
已更新的物件。
- sparsify()[原始碼]#
將係數矩陣轉換為稀疏格式。
將
coef_
成員轉換為 scipy.sparse 矩陣,對於 L1 正規化模型,這比通常的 numpy.ndarray 表示法更節省記憶體和儲存空間。intercept_
成員不會轉換。- 回傳值:
- self
已擬合的估計器。
注意事項
對於非稀疏模型,也就是說,當
coef_
中沒有很多零時,這實際上可能會增加記憶體使用量,因此請謹慎使用此方法。一個經驗法則是,零元素的數量(可以使用(coef_ == 0).sum()
計算)必須超過 50%,這樣才能提供顯著的好處。呼叫此方法後,除非您呼叫 densify,否則使用 partial_fit 方法(如果有的話)進行進一步擬合將無法運作。