第5章 Logistic回歸

2021-08-20 21:02:46 字數 3953 閱讀 3060

回歸:用一條直線對已知資料點進行擬合的過程稱作回歸。

利用logistic回歸進行分類的主要思想:根據現有資料對分類邊界線建立回歸公式,以此進行分類。

回歸的關鍵在於尋找最佳擬合引數,使用的是最優化演算法。

logistic回歸的一般過程

1 收集資料---2 準備資料---3 分析資料---4 訓練演算法(目的是找到最佳的分類回歸係數,占用大部分時間)---5 測試演算法 

---6 使用演算法(將資料轉換為對應的結構化數值,基於訓練得到的回歸係數進行簡單的回歸計算,並判斷類別)

期待的函式:根據所有的輸入然後**出類別。若有兩個分類,則輸出為0/1.

單位階躍函式:該函式在跳躍點上從0瞬間跳到1,該過程有時很難處理。

sigmoid函式:有單位階躍函式相似的性質,且在數學上更易處理。

計算公式和函式影象如下:

當x為0時,函式值為0.5。隨著x值的增大,函式值將逼近於1。隨著x的減小,函式值將逼近於0.logistic回歸分類器:在每個特徵上都乘以乙個回歸係數,然後把所有的結果值相加,將這個總和帶入到sigmoid函式中,進而得到乙個範圍在0-1之間的數值。任何大於0.5的資料被分入1類,小於0.5被歸入0類。

z=w0x0+w1x1+w2x2+...+wn

此處涉及到的最優化方法:梯度上公升法,隨機梯度上公升法,改進的隨機梯度上公升法

思想:要找到某個函式的最大值,最好的方法是沿著該函式的梯度方向探尋。

如果梯度記為∇∇,則函式f(x,y)的梯度由下式表示:

這個梯度意味著沿xx方向移動∂f(x,y)∂x∂f(x,y)∂x,沿yy方向移動∂f(x,y)∂y∂f(x,y)∂y。且函式f(x,y)f(x,y)在待計算的點上有定義且可微。

增加步長(移動量的大小)後,迭代公式為:w:=w+α∇w

f(w)

迭代結束條件:比如迭代次數達到某個指定值或演算法達到某個可以允許的誤差範圍。

偽**:

每個回歸係數初始化為1

重複r次:

計算整個資料集的梯度

使用alpha*gradient更新回歸係數的向量

返回回歸係數

**

#sigmiod函式

def sigmoid(inx):

return 1 / (1 + exp(-inx))

#梯度上公升法演算法

def gradascent(datamatin, classlabels):

#將列表形式的特徵資料轉化為矩陣形式,方便計算:(100,3)

datamatrix = mat(datamatin)

#將列表形式的標籤轉化為矩陣形式,1行多列。然後通過轉置,轉化為列向量,方便計算:(100,1)

labelmat = mat(classlabels).transpose()

#print(shape(labelmat))

m, n = shape(datamatrix)#分別獲得特徵矩陣的行數和列數

alpha = 0.001 #設定移動步長

maxcycles = 500#設定迭代次數

weights = ones((n,1))#初始化回歸係數均為1,n個特徵1列

#print(shape(weights))

for k in range(maxcycles):

h = sigmoid(datamatrix * weights)#計算每個樣本乘以回歸係數後得到的值,呼叫sigmoid函式,獲得分類值,是乙個列向量

#print(datamatrix * weights)

#print(h)

error = labelmat - h#獲得sigmoid分類結果和真實結果間的差值

#print(error)

#更行回歸係數,按照差值的方向調整回歸係數?不明白

weights = weights + alpha * datamatrix.transpose() * error

return weights

由於梯度上公升演算法更新回歸係數時需要遍歷整個資料集(計算整個資料集的分類和更新回歸係數),計算複雜度太高。所以隨機梯度上公升演算法(一次僅用乙個樣本點來更新回歸係數)對其進行了改進。

隨機梯度上公升演算法可以在每個新樣本到來時對分類器進行增量式更新,因而是乙個在線學習演算法,一次處理所有資料被稱為『批處理』。

偽**:

所有回歸係數初始化為1

對資料集中每個樣本:

計算發樣本的梯度

使用alpha * gradient更新回歸係數值

返回回歸係數值

**:

#隨機梯度上公升演算法

def stocgradascent0(datamatrix, classlabels):

m, n = shape(datamatrix)#分別獲得特徵矩陣的行數和列數

alpha = 0.001 #設定移動步長

weights = ones(n)#初始化權重,為numpy.ndarray型別

for i in range(m):

h = sigmoid(sum(datamatrix[i] * weights))#[a,b]*[c,d]=[ab,cd]

error = classlabels[i] - h

weights = weights + alpha * error * datamatrix[i]

return weights

引數變化情況:

從上圖中可以看出,不同係數需要經過不同的迭代次數才能達到穩定的狀態,且在大的波動停止之後還有一些小的周啟新那個波動,這可能是因為一些為被正確分類樣本點資料,在每次迭代時會引發係數的劇烈改變。我們期望演算法能避免來回波動,從而收斂到某個值,且收斂速度需要加快。因此下面一部分解決了該問題。

**:

'''

函式功能:根據特徵,標籤獲得回歸係數

輸入:特徵資料,標籤資料,迭代次數

輸出:回歸係數

思想:調整每次迭代時的步長,且步長隨著迭代次數不斷減少,但不會減少到0(確保多次迭代之後新資料仍具有一定的影響)

可避免步長的嚴格下降:alpha每次減少1/(i+j),i為樣本點下標,j為迭代次數。當j引數變化情況:

可以看到,收斂速度比固定alpha更快,沒有出現週期性波動(隨機選擇機制?)

logistic回歸 logistic回歸

logistic回歸 logistic回歸分析可用於估計某個事件發生的可能性,這是乙個分類模型而不是乙個回歸模型!它的基本思想是利用一條直線將平面上的點分為兩個部分,即兩個類別,要解決的問題就是如何擬合出這條直線,這個擬合的過程就稱之為 回歸 logistic模型 假設你有乙個需要 的內容,要通過三...

logistic分類(logistic回歸 LR)

幾乎所有的教材都是從logistic分類開始的,因為logistic分類實在太經典,而且是神經網路的基本組成部分,每個神經元 cell 都可以看做是進行了一次logistic分類。所謂logistic分類,顧名思義,邏輯分類,是一種二分類法,能將資料分成0和1兩類。logistic分類的流程比較簡單...

Logistic回歸模型

一 logistic回歸模型 線性回歸模型要求因變數是連續型正態變數。當因變數是分類變數時,logistic回歸模型是最好的回歸模型。由於y只能取兩個值1或0,y的條件數學期望 e y xi 1 p y 1 xi 0 p y 0 xi p y 1 xi 選擇乙個函式,p y 1 x f x logi...