1. 程式人生 > >skiti-learn邏輯迴歸演算法庫

skiti-learn邏輯迴歸演算法庫

skiti-learn中,與邏輯迴歸相關的3個類:LogisticRegression, LogisticRegressionCV,logistic_regression_path。LogisticRegressionCV使用交叉驗證選擇正則化係數C。logistic_regression_path類則比較特殊,它擬合數據後,不能直接來做預測,只能為擬合數據選擇合適邏輯迴歸的係數和正則化係數。主要是用在模型選擇的時候。一般情況用不到這個類。

  1. 正則化選擇引數:penalty
    penalty選擇"l1"或"l2",兩種正則化方式, 預設的為L2正則化。
    為了防止過擬合,一般採用L2正則化足夠了,如果採用L2正則化發現還是過擬合,就可以考慮L1正則化,另外,我們希望把一些不重要的特徵係數歸零,使模型係數稀疏的話,也可以採用L1正則化。
    penalty的選擇會影響損失函式的優化方式,即solver引數的選擇。如果使用L2正則化可以有四種優化方式,(newton-cg , lbfgs , liblinear , sag) .而選擇L1正則化只能有一種優化方式 liblinear。這個與L1正則化損失函式不是連續可導有關。

  2. 優化演算法選擇引數:solver
    solver引數有四種優化演算法可以選擇。
    1)liblinear:內部採用的是座標軸下降法
    2)lbfgs:擬牛頓法的一種,利用損失函式二階導矩陣即海森矩陣迭代優化損失函式
    3)newton-cg:牛頓法的一種,也是利用損失函式二階導矩陣海森矩陣優化損失函式
    4)sag:隨機平均梯度下降,每次迭代只採用一部分樣本計算梯度,適用於資料量多的樣本
    邏輯迴歸分二元邏輯迴歸和多元邏輯迴歸,而多元邏輯迴歸又分OvR(one-vs-rest)和MvM(many-vs-many)兩種,而liblinear只支援OvR。所以當遇到MvM的情況是不能採用L1正則化

  3. 分類方式選擇引數:multi_class
    multi_class決定分類的選擇方式,有OvR和multinomia兩種,預設是ovr
    OvR的思想很簡單,無論你是多少元邏輯迴歸,我們都可以看做二元邏輯迴歸。具體做法是,對於第K類的分類決策,我們把所有第K類的樣本作為正例,除了第K類樣本以外的所有樣本都作為負例,然後在上面做二元邏輯迴歸,得到第K類的分類模型。其他類的分類模型獲得以此類推。
    而MvM則相對複雜,這裡舉MvM的特例one-vs-one(OvO)作講解。如果模型有T類,我們每次在所有的T類樣本里面選擇兩類樣本出來,不妨記為T1類和T2類,把所有的輸出為T1和T2的樣本放在一起,把T1作為正例,T2作為負例,進行二元邏輯迴歸,得到模型引數。我們一共需要T(T-1)/2次分類。
    OvR分類效果相對略差(大多情況下),不過速度快,且簡單;MvM分類相對精確。
    ovr可以使用四種損失函式優化方式。MvM只能使用三種,無法使用liblinear。

  4. 型別權重引數:class_weight
    class_weight標示分類模型各種型別的權重,不輸入,即不考慮權重或者說所有型別的權重相同。輸入的話,可以選擇balanced讓庫型別自己計算權重;或者我們自己輸入權重,比如0,1二元模型,class_weight={0:0.9,1:0.1},這樣型別0的權重為90%,1為10%。
    balanced會根據訓練樣本量來計算權重,樣本量越低,權重越高。
    在分類模型中我們一般會遇到以下兩種情況:

    1. 誤分類的代價很高。比如分類合法使用者和非法使用者,將非法使用者分類為合法使用者的代價很高,我們寧願將合法使用者分類為非法使用者。這樣我們可以適當提高非法使用者的權重。
    2. 樣本高度失衡。比如我們使用者樣本有10000條,合法使用者有9995,而非法使用者只有5條。不考慮權重,所有的可能都將預測為合法使用者,不過毫無意義。我們可以用balanced,讓類庫自動提高非法使用者的權重。
  5. 樣本權重引數:sample_weight
    當樣本不平衡導致模型預測能力下降,我們採用調節樣本權重來解決。調節巖本權重的方法有兩種:一種是calss_weight使用balanced;二種是在呼叫fit函式時使用sample_weight。如果以上方法都用到了則樣本的真正權重是calss_weight*sample_weight。
    另外還有些引數比如正則化引數C(交叉驗證就是 Cs),迭代次數max_iter等。與其他庫用法相同。