機器學習實戰04:邏輯迴歸

- Logistic迴歸的一般過程
(1) 收集數據:採用任意方法收集數據。
(2)準備數據:由於需要進行距離計算,因此要求數據類型爲數值型。另外,結構化數據格式則最佳。
(3)分析數據:採用任意方法對數據進行分析。
(4) 訓練算法:大部分時間將用於訓練,訓練的目的是爲了找到最佳的分類迴歸係數。
(5) 測試算法:一旦訓練步驟完成,分類將會很快。
(6) 使用算法:首先,我們需要輸入一些數據,並將其轉換成對應的結構化數值;接着,基於訓練好的迴歸係數就可以對這些數值進行簡單的迴歸計算,判定它們屬於哪個類別;在這之後,我們就可以在輸出的類別上做一些其他分析工作。

- Logistic迴歸
優點:計算代價不高,易於理解和實現。
缺點:容易欠擬合,分類精度可能不高。
適用數據類型:數值型和標稱型數據。

- 梯度上升法
思想:要找到某函數的最大值,最好的方法是沿着該函數的梯度方向探尋。梯度上升算法沿梯度方向移動了一步。可以看到,梯度算子總是指向函數值增長最快的方向。這裏所說的是移動方向,而未提到移動量的大小。該量值稱爲步長,記做α 。用向量來表示的話,梯度上升算法的迭代公式如下:w:=w+α∇ w f(w) 該公式將一直被迭代執行,直至達到某個停止條件爲止,比如迭代次數達到某個指定值或算法達到某個可以允許的誤差範圍。
在這裏插入圖片描述

- 梯度下降算法
它與這裏的梯度上升算法是一樣的,只是公式中的加法需要變成減法。梯度上升算法用來求函數的最大值,而梯度下降算法用來求函數的最小值。

- 訓練算法:使用梯度上升找到最佳參數
100個樣本點,每個點包含兩個數值型特徵: X1和X2。在此數據集上,我們將通過使用梯度上升法找到最佳迴歸係數,也就是擬合出Logistic迴歸模型的最佳參數。

梯度上升法的僞代碼如下:
每個迴歸係數初始化爲1
重複R次:
    計算整個數據集的梯度
    使用alpha × gradient更新迴歸係數的向量
    返回迴歸係數 

- 訓練算法:隨機梯度上升
梯度上升算法在每次更新迴歸係數時都需要遍歷整個數據集,該方法在處理100個左右的數據集時尚可,但如果有數十億樣本和成千上萬的特徵,那麼該方法的計算複雜度就太高了。一種改進方法是一次僅用一個樣本點來更新迴歸係數,該方法稱爲隨機梯度上升算法。由於可以在新樣本到來時對分類器進行增量式更新,因而隨機梯度上升算法是一個在線學習算法。與“在線學習”相對應,一次處理所有數據被稱作是“批處理”。

隨機梯度上升算法可以寫成如下的僞代碼:
所有迴歸係數初始化爲1
對數據集中每個樣本
        計算該樣本的梯度
        使用alpha × gradient更新迴歸係數值
返回迴歸係數值 

- 示例:從疝氣病症預測病馬的死亡率

1、準備數據:處理數據中的缺失值
a.使用可用特徵的均值來填補缺失值;
b.使用特殊值來填補缺失值,如-1;
c.忽略有缺失值的樣本;
d.使用相似樣本的均值添補缺失值;
e.使用另外的機器學習算法預測缺失值。

現在,我們對下一節要用的數據集進行預處理,使其可以順利地使用分類算法。在預處理階段需要做兩件事:

第一,所有的缺失值必須用一個實數值來替換,因爲我們使用的NumPy數據類型不允許包含缺失值。這裏選擇實數0來替換所有缺失值,恰好能適用於Logistic迴歸。這樣做的直覺在於,我們需要的是一個在更新時不會影響係數的值。

然後,如果在測試數據集中發現了一條數據的類別標籤已經缺失,那麼我們的簡單做法是將該條數據丟棄。這是因爲類別標籤與特徵不同,很難確定採用某個合適的值來替換。採用Logistic迴歸進行分類時這種做法是合理的,而如果採用類似kNN的方法就可能不太可行。

2、測試算法:用 Logistic 迴歸進行分類

使用Logistic迴歸方法進行分類並不需要做很多工作,所需做的只是把測試集上每個特徵向量乘以最優化方法得來的迴歸係數,再將該乘積結果求和,最後輸入到Sigmoid函數中即可。如果對應Sigmoid值大於0.5就預測類別標籤爲1,否則爲0。

- 本章小結

Logistic迴歸的目的是尋找一個非線性函數Sigmoid的最佳擬合參數,求解過程可以由最優化算法來完成。在最優化算法中,最常用的就是梯度上升算法,而梯度上升算法又可以簡化爲隨機梯度上升算法。隨機梯度上升算法與梯度上升算法的效果相當,但佔用更少的計算資源。此外,隨機梯度上升是一個在線算法,它可以在新數據到來時就完成參數更新,而不需要重新讀取整個數據集來進行批處理運算。

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