最近會開始一個新的系列,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)

:為估計器設定引數