首先,Logistic回歸雖然名字里帶“回歸”,但是它實際上是一種分類方法,主要用于兩分類問題,利用Logistic函數(或稱為Sigmoid函數),自變量取值范圍為(-INF, INF),自變量的取值范圍為(0,1),函數形式為:
由于sigmoid函數的定義域是(-INF, +INF),而值域為(0, 1)。因此最基本的LR分類器適合于對兩分類(類0,類1)目標進行分類。Sigmoid 函數是個很漂亮的“S”形,如下圖所示:
LR分類器(Logistic Regression Classifier)目的就是從訓練數據特征學習出一個0/1分類模型--這個模型以樣本特征的線性組合作為自變量,使用logistic函數將自變量映射到(0,1)上。因此LR分類器的求解就是求解一組權值
(
是是名義變量--dummy,為常數,實際工程中常另x0=1.0。不管常數項有沒有意義,最好保留),并代入Logistic函數構造出一個預測函數:
函數的值表示結果為1的概率,就是特征屬于y=1的概率。因此對于輸入x分類結果為類別1和類別0的概率分別為:
當我們要判別一個新來的特征屬于哪個類時,按照下式求出一個z值:
(x1,x2,...,xn是某樣本數據的各個特征,維度為n)
進而求出---若大于0.5就是y=1的類,反之屬于y=0類。(注意:這里依然假設統計樣本是均勻分布的,所以設閾值為0.5)。LR分類器的這一組權值如何求得的呢?這就需要涉及到極大似然估計MLE和優化算法的概念了,數學中最優化算法常用的就是梯度上升(下降)算法。
Logistic回歸可以也可以用于多分類的,但是二分類的更為常用也更容易解釋。所以實際中最常用的就是二分類的Logistic回歸。LR分類器適用數據類型:數值型和標稱型數據。其優點是計算代價不高,易于理解和實現;其缺點是容易欠擬合,分類精度可能不高。
首先,理解下述數學推導過程需要較多的導數求解公式,可以參考“常用基本初等函數求導公式積分公式”。
假設有n個觀測樣本,觀測值分別為設
為給定條件下得到yi=1的概率。在同樣條件下得到yi=0的條件概率為
。于是,得到一個觀測值的概率為
-----此公式實際上是綜合公式(1)得出
因為各項觀測獨立,所以它們的聯合分布可以表示為各邊際分布的乘積:
(m表統計樣本數目)
上式稱為n個觀測的似然函數。我們的目標是能夠求出使這一似然函數的值最大的參數估計。于是,最大似然估計的關鍵就是求出參數,使上式取得最大值。
對上述函數求對數:
最大似然估計就是求使上式取最大值時的θ,這里可以使用梯度上升法求解,求得的θ就是要求的最佳參數。在Andrew Ng的課程中將J(θ)取為下式,即:J(θ)=-(1/m)l(θ),J(θ)最小值時的θ則為要求的最佳參數。通過梯度下降法求最小值。θ的初始值可以全部為1.0,更新過程為:
(j表樣本第j個屬性,共n個;a表示步長--每次移動量大小,可自由指定)
因此,θ(可以設初始值全部為1.0)的更新過程可以寫成:
(i表示第i個統計樣本,j表樣本第j個屬性;a表示步長)
該公式將一直被迭代執行,直至達到收斂(在每一步迭代中都減小,如果某一步減少的值少于某個很小的值
(小于0.001), 則其判定收斂)或某個停止條件為止(比如迭代次數達到某個指定值或算法達到某個可以允許的誤差范圍)。
Vectorization是使用矩陣計算來代替for循環,以簡化計算過程,提高效率。如上式,Σ(...)是一個求和的過程,顯然需要一個for語句循環m次,所以根本沒有完全的實現vectorization。下面介紹向量化的過程:
約定訓練數據的矩陣形式如下,x的每一行為一條訓練樣本,而每一列為不同的特稱取值:
g(A)的參數A為一列向量,所以實現g函數時要支持列向量作為參數,并返回列向量。由上式可知hθ(x)-y可由g(A)-y一次計算求得。
θ更新過程可以改為:
綜上所述,Vectorization后θ更新的步驟如下:
(1)求A=X*θ(此處為矩陣乘法,X是(m,n+1)維向量,θ是(n+1,1)維列向量,A就是(m,1)維向量)
(2)求E=g(A)-y(E、y是(m,1)維列向量)
(3)求 (a表示步長)
a的取值也是確保梯度下降收斂的關鍵點。值太小則收斂慢,值太大則不能保證迭代過程收斂(邁過了極小值)。要確保梯度下降算法正確運行,需要保證 J(θ)在每一步迭代中都減小。如果步長a取值正確,那么J(θ)應越來越小。所以a的取值判斷準則是:如果J(θ)變小了表明取值正確,否則減小a的值。
選擇步長a的經驗為:選取一個a值,每次約3倍于前一個數,如果迭代不能正常進行(J增大了,步長太大,邁過了碗底)則考慮使用更小的步長,如果收斂較慢則考慮增大步長,a取值示例如:
…, 0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1…。
Logistic 回歸也是一種回歸算法,多維特征的訓練數據進行回歸采取梯度法求解時其特征值必須做scale,確保特征的取值范圍在相同的尺度內計算過程才會收斂(因為特征值得取值范圍可能相差甚大,如特征1取值為(1000-2000),特征2取值為(0.1-0.2))。feature scaling的方法可自定義,常用的有:
1) mean normalization (or standardization)
(X - mean(X))/std(X),std(X)表示樣本的標準差
2) rescaling
(X - min) / (max - min)
梯度上升(下降)算法在每次更新回歸系數時都需要遍歷整個數據集, 該方法在處理100個左右的數據集時尚可,但如果有數十億樣本和成千上萬的特征,那么該方法的計算復雜度就太高了。一種改進方法是一次僅用一個樣本點來更新回歸系數,該方法稱為隨機梯度算法。由于可以在新樣本到來時對分類器進行增量式更新,它可以在新數據到來時就完成參數更新,而不需要重新讀取整個數據集來進行批處理運算,因而隨機梯度算法是一個在線學習算法。(與“在線學習”相對應,一次處理所有數據被稱作是“批處理”)。隨機梯度算法與梯度算法的效果相當,但具有更高的計算效率。
上節通過Andrew Ng的課程對J(θ)=-(1/m)l(θ)采取梯度下降法求解說明了Logistic回歸的求解過程,本節Python實現算法的過程依然直接對J(θ)采取梯度上升法或者隨機梯度上升法求解,LRTrain對象同時實現了采取梯度上升法或者隨機梯度上升法求解過程。
LR分類器學習包中包含lr.py/object_json.py/test.py三個模塊。lr模塊通過對象logisticRegres實現了LR分類器,支持gradAscent('Grad') and randomGradAscent('randomGrad')兩種求解方法(二選一,classifierArray只存儲一種分類求解結果,當然你也可以定義兩個classifierArray同時支持兩種求解方法)。
test模塊中是利用LR分類器根據疝氣病癥預測病馬死亡率的應用。該數據存在一個問題--數據由30%的丟失率,這里采用特殊值0替代,因為0不會影響LR分類器的權值更新。
訓練數據中樣本特征值的部分缺失是很棘手的問題,很多文獻致力于解決該問題,因為數據直接丟掉太可惜,重新獲取代價也昂貴。一些可選的數據丟失處理方法包括:
□使用可用特征的均值來填補缺失值;
□使用特殊值來±真補缺失值,如-1;
□忽略有缺失值的樣本;
□使用相似樣本的均值添補缺失值;
□使用另外的機器學習算法預測缺失值。
LR分類器算法學習包下載地址是:
Logistic回歸的主要用途:
尋找危險因素:尋找某一疾病的危險因素等;
預測:根據模型,預測在不同的自變量情況下,發生某病或某種情況的概率有多大;
判別:實際上跟預測有些類似,也是根據模型,判斷某人屬于某病或屬于某種情況的概率有多大,也就是看一下這個人有多大的可能性是屬于某病。
Logistic回歸主要在流行病學中應用較多,比較常用的情形是探索某疾病的危險因素,根據危險因素預測某疾病發生的概率,等等。例如,想探討胃癌發生的危險因素,可以選擇兩組人群,一組是胃癌組,一組是非胃癌組,兩組人群肯定有不同的體征和生活方式等。這里的因變量就是是否胃癌,即“是”或“否”,自變量就可以包括很多了,例如年齡、性別、飲食習慣、幽門螺桿菌感染等。自變量既可以是連續的,也可以是分類的。
邏輯回歸之梯形下降計算最值
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com