1. 程式人生 > >機器學習--邏輯迴歸與softmax

機器學習--邏輯迴歸與softmax

1. 簡介

邏輯迴歸和Softmax迴歸是兩個基礎的分類模型,前者主要處理二分類問題,而後者處理多分類問題,但事實上Softmax迴歸就是邏輯迴歸的一般形式。

2.邏輯迴歸模型

 

 sigmoid

想了解Logistic迴歸,我們必須先看一看Sigmoid函式 ,我們也可以稱它為Logistic函式。它的公式如下:

機器學習實戰教程(六):Logistic迴歸基礎篇之梯度上升演算法

機器學習實戰教程(六):Logistic迴歸基礎篇之梯度上升演算法

機器學習實戰教程(六):Logistic迴歸基礎篇之梯度上升演算法

整合成一個公式,就變成了如下公式:

機器學習實戰教程(六):Logistic迴歸基礎篇之梯度上升演算法

下面這張圖片,為我們展示了Sigmoid函式的樣子。

機器學習實戰教程(六):Logistic迴歸基礎篇之梯度上升演算法

 

3.對數機率

對數機率(log odds)

由(1-1)變化得到

其中

(1-2)

(1-2)

 

4. 極大似然法(maximum likelihood)

①極大似然法:最大化對數似然函式

初始化引數

再令P為

則似然項可重寫為

(1-3)

②將最大化問題轉換為最小化負對數似然函式求解

 5.Softmax迴歸

Softmax迴歸處理多分類問題,我們假設函式 形式如下:
 


和邏輯迴歸一樣,得到loss函式為:

 


 
其中的1{.}是一個指示性函式,即當大括號中的值為真時,該函式的結果就為1,否則其結果就為0。


然後計算損失函式的偏導函式,得到:


 
之後就可以用如果要用梯度下降法,或者L-BFGS法求得未知引數。


 
看上面的推到我們可以發現,對每一個引數減去一個引數,最後的結果沒有影響。其實softmax 迴歸中對引數的最優化解不只一個,每當求得一個優化引數時,如果將這個引數的每一項都減掉同一個數,其得到的損失函式值也是一樣的,這說明解不是唯一的。


之所以會出現這樣的現象,因為損失函式不是嚴格非凸的,也就是說在區域性最小值點附近是一個”平坦”的,所以在這個引數附近的值都是一樣的了。
為避免出現這樣的情況,加入正則項(比如說,用牛頓法求解時,hession矩陣如果沒有加入規則項,就有可能不是可逆的從而導致了剛才的情況,如果加入了規則項後該hession矩陣就不會不可逆了),加入正則項後的loss函式表示式為:
 


此時loss函式的偏導函式為:
 

同樣的,我們在邏輯迴歸中,也可以加上正則項。

5 LogisticRegression 引數說明

引數 意義 備註
penalty 懲罰項,str型別,可選引數為l1和l2,預設為l2 用於指定懲罰項中使用的規範 。L1G規範假設的是模型的引數滿足拉普拉斯分佈,L2假設的模型引數滿足高斯分佈,所謂的正規化就是加上對引數的約束,使得模型更不會過擬合(overfit),加約束的情況下,理論上應該可以獲得泛化能力更強的結果。另newton-cg、sag和lbfgs求解演算法只支援L2規範。
dual 對偶或原始方法,bool型別,預設為False。 對偶方法只用在求解線性多核(liblinear)的L2懲罰項上。當樣本數量>樣本特徵的時候,dual通常設定為False。
tol 停止求解的標準,float型別,預設為1e-4 即求解到多少的時候停止,認為已經求出最優解。
c 正則化係數λ的倒數,float型別,預設為1.0,必須是正浮點型數。 像SVM一樣,越小的數值表示越強的正則化。
fit_intercept 是否存在截距或偏差,bool型別,預設為True。 指定是否應將常量(a.k.a. bias或intercept)新增到決策函式中。
intercept_scaling float型別,預設為1。 僅在正則化項為”liblinear”,且fit_intercept設定為True時有用。【注意】合成特徵權重與所有其他特徵一樣經受l1 / l2正則化。 為了減小正則化對合成特徵權重(並因此對截距)的影響,必須增加intercept_scaling。
class_weight 用於標示分類模型中各種型別的權重,可以是一個字典dict或 ’balanced’ 字串,預設為None,即不輸入,不考慮權重 如果選擇輸入的話,可以選擇balanced讓類庫自己計算型別權重,或者自己輸入各個型別的權重 。 舉個例子,比如對於0,1的二元模型,我們可以定義class_weight={0:0.9,1:0.1},這樣型別0的權重為90%,而型別1的權重為10%。如果class_weight選擇balanced,那麼類庫會根據訓練樣本量來計算權重。某種型別樣本量越多,則權重越低,樣本量越少,則權重越高。當class_weight為balanced時,類權重計算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples為樣本數,n_classes為類別數量,np.bincount(y)會輸出每個類的樣本數,例如y=[1,0,0,1,1],則np.bincount(y)=[2,3]。
random_state 隨機數種子,int型別,可選引數,預設為無 僅在正則化優化演算法為sag,liblinear時有用。
solver 優化演算法選擇引數,有五個可選引數,即newtoncg, lbfgs, liblinear, sag,saga。 預設為liblinear。 solver引數決定了我們對邏輯迴歸損失函式的優化方法,有五種演算法可以選擇,分別是: liblinear: 使用開源的liblinear庫實現,內部使用了座標軸下降法來迭代優化損失函式。lbfgs:擬牛頓法的一種,利用損失函式二階導數矩陣即海森矩陣來迭代優化損失函式。newton-cg:也是牛頓法家族的一種,利用損失函式二階導數矩陣即海森矩陣來迭代優化損失函式。sag:即隨機平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區別是每次迭代僅僅用一部分的樣本來計算梯度,適合於樣本資料多的時候。saga:線性收斂的隨機優化演算法的的變種。 對於小型資料集,‘liblinear’是一個不錯的選擇,而 'sag’和’saga’對於大型的更快。對於多類問題,只有’newton-cg’,‘sag’,'saga’和’lbfgs’處理多項損失; 'liblinear’僅限於one-vs-rest方案。‘newton-cg’, 'lbfgs’和’sag’只處理L2懲罰,而’liblinear’和’saga’處理L1懲罰。請注意,“sag”和“saga”快速收斂僅在具有大致相同比例的要素上得到保證。 您可以使用sklearn.preprocessing中的縮放器預處理資料。版本0.17中的新功能:隨機平均梯度下降求解器。版本0.19中的新功能:SAGA slover。
max_iter 演算法收斂最大迭代次數,int型別,預設為100 僅在正則化優化演算法為newton-cg, sag和lbfgs才有用,演算法收斂的最大迭代次數
multi_class 分類方式選擇引數,str型別,可選引數為’ovr’和’multinomial’,預設為’ovr’。 ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元邏輯迴歸,ovr和multinomial並沒有任何區別,區別主要在多元邏輯迴歸上。多類選項可以是’ovr’或’multinomial’。 如果選擇的選項是’ovr’,那麼二進位制問題適合每個標籤。 另外,最小化損失是整個概率分佈中的多項式損失擬合。 不適用於liblinear解算器。版本0.18中的新功能:“多項式”案例的隨機平均梯度下降求解器。
verbose 日誌冗長度,int型別。預設為0 0就是不輸出訓練過程,1的時候偶爾輸出結果,大於1,對於每個子模型都輸出
warm_start 熱啟動引數,bool型別。預設為False。 如果為True,則下一次訓練是以追加樹的形式進行(重新使用上一次的呼叫作為初始化),否則,只需擦除以前的解決方案。 對於liblinear解算器沒用。
n_jobs 並行數,int型別,預設為1。 1的時候,用CPU的一個核心執行程式,2的時候,用CPU的2個核心執行程式。為-1的時候,用所有CPU的核心執行程式。

6.參考

https://blog.csdn.net/weixin_38278334/article/details/82958979