邏輯迴歸(Logistic)

算法介紹

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、分類精度不高。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章