算法介紹
Logistic迴歸是一種廣義線性迴歸(generalizedlinear model),因此與多重線性迴歸分析有很多相同之處。它們的模型形式基本上相同,都具有 w`x+b,其中w和b是待求參數,其區別在於他們的因變量不同,多重線性迴歸直接將w`x+b作爲因變量,即y =w`x+b,而logistic迴歸則通過函數L將w`x+b對應一個隱狀態p,p =L(w`x+b),然後根據p 與1-p的大小決定因變量的值。如果L是logistic函數,就是logistic迴歸,如果L是多項式函數就是多項式迴歸。本系統的L函數採用的是梯度上升法,梯度上升法的模型圖如下:
它的公式如下:
算法的關鍵點就聚焦在 這個參數的設置上。
通過優化,本系統採用的是隨機梯度上升算法:
流程圖如下:
基本步驟說明:
1、 每次迭代都需要調整, 修改的目的是環節模型的高頻波動,本系統的 計算方法是: ,使得每次迭代的 值會變小,但是不會縮小爲0;
2、 通過隨機選取樣本來更新迴歸參數,這種方式避免了順序數據的週期性波動。
3、 Sigmod函數就是一個類階躍函數 ,作用是把數據進行歸一化
Python代碼實現如下:
def stocGradAscent1(dataMatrix, classLabels, numIter=150):
m,n = shape(dataMatrix)
weights = ones(n) #初始化權重值
index = 1;
for j in range(numIter):
dataIndex = range(m)
for i in range(m):
#aplha值每次隨機調整大小通過i和j
alpha = 4/(1.0+j+i)+0.0001
#隨機選擇數據
randIndex = int(random.uniform(0,len(dataIndex)))
#依據數據向量和權重內乘預測標籤值
h = sigmoid(sum(dataMatrix[randIndex]*weights))
#依據預測標籤值和現有標籤值計算delta值
delta = classLabels[randIndex] – h
#更新權重
weights = weights + alpha * delta * dataMatrix[randIndex]
del(dataIndex[randIndex])
return weights
優點
1、計算代價不高,易於理解和實現
缺點
1、容易產生欠和過擬合。
2、分類精度不高。