Sklearn參數詳解—LR模型
來自專欄數據科學成長之路1 人贊了文章
最近會開始一個新的系列,sklearn庫中各模型的參數解釋,本篇主要講述最基礎的LR模型。
模型參數詳解
邏輯回歸:
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=liblinear, max_iter=100, multi_class=ovr, verbose=0, warm_start=False, n_jobs=1)?
penalty
:正則化選擇參數,參數可選值為l1和l2,分別對應l1正則化和l2正則化,默認是l2正則化。
調整該參數的目的主要是為了防止過擬合,一般penalty選擇l2正則化就夠啦,但是如果選擇l2正則化發現依然過擬合,即預測效果還是很差的時候,就可以考慮l1正則化。如果模型的特徵非常多,我們希望做一些特徵選擇(即把一些不重要的特徵過濾掉),這個時候也可以考慮用l1正則化。
penalty參數的選擇會影響我們損失函數優化演算法的選擇,即參數solver
的選擇,如果是l2正則化,可選的優化演算法 {『newton-cg』, 『lbfgs』, 『liblinear』, 『sag』}都可以選擇。但是如果penalty是L1正則化的話,就只能選擇『liblinear』了。這是因為L1正則化的損失函數不是連續可導的,而{『newton-cg』, 『lbfgs』,『sag』}這三種優化演算法時都需要損失函數的一階或者二階連續導數。而『liblinear』並沒有這個依賴。這幾個優化方法在solver參數環節進行講述。
dual
:用來指明是否將原問題改成他的對偶問題,對偶問題可以理解成相反問題,比如原問題是求解最大值的線性規劃,那麼他的對偶問題就是轉化為求解最小值的線性規劃,適用於樣本較小的數據集,因樣本小時,計算複雜度較低。
tol
:殘差收斂條件,默認是0.0001,也就是只需要收斂的時候兩步只差<0.0001就停止,可以設置更大或更小。(邏輯回歸模型的損失函數是殘差平方和)
C
:正則化係數,正則化強度的導數,必須是一個正數,值越小,正則化強度越大,即防止過擬合的程度更大。
fit_intercept
:是否將截距/方差加入到決策模型中,默認為True。
class_weight
:class_weight是很重要的一個參數,是用來調節正負樣本比例的,默認是值為None,也就是正負樣本的權重是一樣的,你可以以dict的形式給模型傳入任意你認為合適的權重比,也可以直接指定一個值「balanced」,模型會根據正負樣本的絕對數量比來設定模型最後結果的權重比。
比如,有一數據集的正負樣本絕對數量比為4:6,如果你給參數class_weight賦予balanced值,那麼最後模型結果中,正負樣本的權重比就會變成6:4。
random_state
:隨機種子的設置,默認是None,如果設置了隨機種子,那麼每次使用的訓練集和測試集都是一樣的,這樣不管你運行多少次,最後的準確率都是一樣的;如果沒有設置,那麼每次都是不同的訓練集和測試集,最後得出的準確率也是不一樣的。
solver
:用來指明損失函數的優化方法,默認是『liblinear』方法,sklearn自帶了如下幾種:
參數值優化方法liblinear使用了坐標軸下降法來迭代優化損失函數lbfgs擬牛頓法的一種,利用損失函數二階導數矩陣即海森矩陣來迭代優化損失函數newton-cg也是牛頓法法的一種,利用損失函數二階導數矩陣即海森矩陣來迭代優化損失函數sag即隨機平均梯度下降,是梯度下降法的變種,是一種線性收斂演算法,和普通梯度下降法的區別是每次迭代僅僅用一部分的樣本來計算梯度,適合於樣本數據多的時候
newton-cg, lbfgs和sag這三種優化演算法時都需要損失函數的一階或者二階連續導數,因此不能用於沒有連續導數的L1正則化,只能用於L2正則化。而liblinear對L1正則化和L2正則化都適用。同時,因sag每次僅僅使用了部分樣本進行梯度迭代,所以當數據量較少時不宜選用,而當數據量很大時,為了速度,sag是第一選擇。
max_iter
:演算法收斂的最大迭代次數,即求取損失函數最小值的迭代次數,默認是100,multi_class
:分類方法參數選擇,『ovr』和『multinomial』兩個值可以選擇,默認值為『ovr』,如果分類問題是二分類問題,那麼這兩個參數的效果是一樣的,主要體現在多分類問題上。
對於多分類問題,"ovr"分類方法是:針對每一類別進行判斷時,都會把這個分類問題簡化為是/非兩類問題;而『multinomial』是從眾多類別中選出兩個類別,對這兩個類別進行判斷,待判斷完成後,再從剩下的類別中再選出兩類進行判斷,直至最後判斷完成。
verbose
:英文意思是」冗餘「,就是會輸出一些模型運算過程中的東西(任務進程),默認是False,也就是不需要輸出一些不重要的計算過程。
warm_start
:是否使用上次的模型結果作為初始化,默認是False,表示不使用。
n_jobs
:並行運算數量(核的數量),默認為1,如果設置為-1,則表示將電腦的cpu全部用上。
模型對象
coef_
:返回各特徵的係數,絕對值大小可以理解成特徵重要性
intercept_
:返回模型的截距n_iter_
:模型迭代次數
模型方法
decision_function(X)
:返回決策函數值(比如svm中的決策距離)predict_proba(X)
:返回每個類別的概率值(有幾類就返回幾列值)predict_log_proba(X)
:返回概率值的log值(即將概率取對數)predict(X)
:返回預測結果值(0/1)score(X, y=None)
:返回函數get_params(deep=True)
:返回估計器的參數set_params(**params)
:為估計器設置參數
推薦閱讀:
※深度學習玩轉農業補貼精細化管理
※吳恩達機器學習第十一周課後感
※htfhxx吳恩達深度學習與神經網路學習第三周(3)
※Policy-based Deep Reinforcement Learning -- Policy Gradient
※【報道】Kaggle 大神 Eureka 的高手進階之路