sklearn中的邏輯回歸接口如下:
模型參數
此處隻列舉重要的超參數,部分參數大部分情況下直接使用預設值即可。
參數 | 說明 |
---|---|
penalty | 正則化參數,三種取值:{‘l1’, ‘l2’, ‘elasticnet’, ‘none’}, default=’l2’ |
C | 正則強度的倒數;必須為正浮點數。與支援向量機一樣,較小的值指定更強的正則化。 |
class_weight | 樣本權重,可以是一個字典或者’balanced’字元串,預設為None。 對于二分類模型,可以這樣指定權重:class_weight={0:0.9,1:0.1} 當class_weight=‘balanced’,那麼類庫會根據訓練樣本量來計算權重。某種類型樣本量越多,則權重越低,樣本量越少,則權重越高。 |
solver | 優化算法選擇參數,五種取值:newton-cg,lbfgs,liblinear,sag,saga。default = liblinear。 liblinear适用于小資料集,而sag和saga适用于大資料集因為速度更快。 如果是L2正則化,那麼4種可選的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以選擇。但是如果penalty是L1正則化的話,就隻能選擇‘liblinear’了。 |
multi_class | 分類方式選擇參數,可選參數為ovr和multinomial,default = ovr。 MvM分類相對精确,但是分類速度沒有OvR快 如果選擇了ovr,則4種損失函數的優化方法liblinear,newton-cg,lbfgs和sag都可以選擇。如果選擇了multinomial,則隻能選擇newton-cg, lbfgs和sag了 |
verbose | 日志冗長度,int類型。預設為0。就是不輸出訓練過程,1的時候偶爾輸出結果,大于1,對于每個子模型都輸出。 |
warm_start | 熱啟動參數,bool類型。預設為False。如果為True,則下一次訓練是以追加樹的形式進行(重新使用上一次的調用作為初始化)。 |
n_jobs | 并行數。int類型,預設為1。1的時候,用CPU的一個核心運作程式,2的時候,用CPU的2個核心運作程式。為-1的時候,用所有CPU的核心運作程式。 |
tol | 停止求解的标準,float類型,預設為1e-4。就是求解到多少的時候,停止,認為已經求出最優解。 |
fit_intercept | 是否存在截距或偏差,bool類型,預設為True。 |
intercept_scaling | 當solver= ‘liblinear’且fit_intercept=True時有用, |
max_iter | 算法收斂的最大疊代次數,即求取損失函數最小值的疊代次數,預設是100, |
dual | 預設dual=False,用來指明是否将原問題改成他的對偶問題,對偶問題可以了解成相反問題,比如原問題是求解最大值的線性規劃,那麼他的對偶問題就是轉化為求解最小值的線性規劃,适用于樣本較小的資料集,因樣本小時,計算複雜度較低。 |
說明:
(1)參數penalty的三種正則化,分别對應如下的數學原理:
ℓ 2 \ell_2 ℓ2正則化: min w , c 1 2 w T w + C ∑ i = 1 n log ( exp ( − y i ( X i T w + c ) ) + 1 ) . \min_{w, c} \frac{1}{2}w^T w + C \sum_{i=1}^n \log(\exp(- y_i (X_i^T w + c)) + 1) . minw,c21wTw+C∑i=1nlog(exp(−yi(XiTw+c))+1).
ℓ 1 \ell_1 ℓ1正則化: min w , c ∣ w ∣ 1 + C s u m i = 1 n log ( e x p ( − y i ( X i T w + c ) ) + 1 ) \min_ {w,c} \ | w \ | _1 + C \ sum_ {i = 1} ^ n \log(\ exp(-y_i(X_i ^ T w + c))+ 1) minw,c ∣w ∣1+C sumi=1nlog( exp(−yi(XiTw+c))+1)
Elastic-Net正則化: min w , c 1 − r h o 2 w T w + ρ ∥ w ∣ 1 + C ∑ i = 1 n log ( exp ( − y i ( X i T w + c ) ) + 1 ) \min_ {w,c} \frac {1-\ rho} {2} w ^ T w + \rho \| w \ | _1 + C \sum_ {i = 1} ^ n \log(\exp(-y_i (X_i ^ T w + c))+ 1) minw,c21− rhowTw+ρ∥w ∣1+C∑i=1nlog(exp(−yi(XiTw+c))+1)
(2)class_weight作用:
在詐騙電話與正常電話的分類模型中,将詐騙電話歸為正常電話的代價很高,我們甯願選擇将正常電話歸為詐騙電話,然後在做處理,這時,我們可以提高詐騙電話的權重。還有一種情況是解決樣本極度不平衡問題。
(3)solver的五種取值:
liblinear:坐标軸下降法來疊代優化損失函數。
lbfgs:利用損失函數二階導數矩陣即海森矩陣來疊代優化損失函數。
newton:利用損失函數二階導數矩陣即海森矩陣來疊代優化損失函數。
sag:即随機平均梯度下降,是梯度下降法的變種,和普通梯度下降法的差別是每次疊代僅僅用一部分的樣本來計算梯度,适合于樣本資料多的時候。
saga:線性收斂的随機優化算法的的變重。
如果是L2正則化,那麼4種可選的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以選擇。但是如果penalty是L1正則化的話,就隻能選擇‘liblinear’了。這是因為L1正則化的損失函數不是連續可導的,而{‘newton-cg’, ‘lbfgs’,‘sag’}這三種優化算法時都需要損失函數的一階或者二階連續導數。而‘liblinear’并沒有這個依賴。

模型方法
方法 | 說明 |
---|---|
fit(X, y, sample_weight=None) | 拟合模型,用來訓練LR分類器,其中X是訓練樣本,y是對應的标記向量 |
predict(X) | 用來預測樣本,也就是分類,X是測試集。傳回array。 |
predict_proba(X) | 輸出分類機率。傳回每種類别的機率,按照分類類别順序給出。如果是多分類問題,multi_class=“multinomial”,則會給出樣本對于每種類别的機率。 |
score(X, y, sample_weight=None) | 傳回給定測試集合的平均準确率(mean accuracy),浮點型數值。 對于多個分類傳回,則傳回每個類别的準确率組成的哈希矩陣。R^2評估模型 |
模型的訓練結果
參數 | 說明 |
---|---|
classes_ | 分類器類别标簽清單。 |
coef_ | 決策函數中要素的系數。shape=(1,n_features)或(n_classes,n_features) |
intercept_** | 決策函數的截距。shape(1,)或ndarray(n_classes,) |
執行個體
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
# 初始化模型,使用預設的超參數
clf = LogisticRegression()
# 輸入訓練資料
clf.fit(X,y)
clf.predict(X[:2, :])
# 輸出:array([0, 0])
clf.predict_proba(X[:2, :])
# 輸出:array([[9.81797141e-01, 1.82028445e-02, 1.44269293e-08],
# [9.71725476e-01, 2.82744937e-02, 3.01659208e-08]])
邏輯回歸調參比較重要的參數是solver和penalty。
舉例:資料量比較少,特征數比較多的情況下,可以使用以下的參數: