1. 程式人生 > >機器學習Logistic迴歸@歡迎來到機器學習小課堂!希望你能有所收穫!

機器學習Logistic迴歸@歡迎來到機器學習小課堂!希望你能有所收穫!

機器學習實戰專輯part1——Logistic迴歸@[適合初學小白超詳細!]

作為一個學習過java的熱愛程式碼的研究生也是未來的程式媛,學習python覺得頗為開心,但是一路走來只有自己知道自己的艱辛和不易,從一個小白走到今天不知道入了多少坑走了多少彎路,所以,想把自己曾經不懂還有考慮到超級小白可能不懂得地方都盡力解釋得詳細且清楚,幫助大家的同時也為自己做好複習筆記,以便不時之需。如有不懂,歡迎提問,如有不對,歡迎指正!

1.Logistic迴歸基本概念

迴歸:假設現在有一些資料點,我們用一條直線對這些點進行擬合(該線稱為最佳擬合直線),這個擬合過程就稱為迴歸。
線性迴歸

:線性迴歸是利用數理統計中迴歸分析,來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法。其表達形式為y = w’x+e,e為誤差服從均值為0的正態分佈。簡單說,就是自變數和因變數之間是線性關係。引數計算方法一般是最小二乘法。
Logistic迴歸:直接將線性迴歸的模型扣到Logistic迴歸中,會造成方程二邊取值區間不同和普遍的非直線關係。所以,才引入Logistic迴歸。Logistic迴歸實質即發生概率除以沒有發生概率再取對數。也就是通過Sigmoid函式將任何連續的數值對映到[0,1]之間。引數計算方法一般是梯度下降法。
舉個栗子:借用吳恩達老師講的癌症的例子
在這裡插入圖片描述
如果我們用線性迴歸來預測癌症的話,可以想象對於這種分類問題,線性迴歸很難找到一個完美擬合數據的模型,而且一些特別的資料,也就是噪音會對它的準確率產生很大的影響。
在這裡插入圖片描述

在新加一組資料之後,方程的準確率降低了很多很多,所以線性迴歸更適合用來預測資料,對於這種分類問題還是需要Logistic迴歸來解決。
Sigmoid函式在這裡插入圖片描述
在這裡插入圖片描述
其中: z = w0x0+w1x1+….+wnxn,w為引數, x為特徵
在這裡插入圖片描述
在這裡插入圖片描述

Sigmoid函式的工作原理就是它總能把任意的輸入x轉變成一個在[0,1]區間的值,有助於我們對輸出進行分類,任何屬於[0.5,1]的歸為1,任何屬於[0,0.5]的歸為0。

cost function:
線上性迴歸中,我們的代價函式是根據最小化觀察值和估計值的差平方和來計算。在這裡插入圖片描述
但是對於logistic迴歸,我們的cost fucntion不能最小化觀察值和估計值的差平法和,因為這樣我們會發現J(θ)為非凸函式,此時就存在很多區域性極值點,就無法用梯度迭代得到最終的引數。
因此我們這裡重新定義一種cost function在這裡插入圖片描述


把這個式子進行合併,便可以得到我們logistic迴歸的代價函式:在這裡插入圖片描述
其中,m為樣本的總數,y(i)表示第i個樣本的類別,x(i)表示第i個樣本,需要注意的是θ是多維向量,x(i)也是多維向量。
那麼,現在我只要求出J(θ)的偏導,就可以利用梯度上升演算法,求解J(θ)的極大值了。

2.梯度上升法

有了以上知識,接下來我們就要尋找最佳迴歸係數了,也即是向量w,在這裡我們使用的梯度上升法。基於的思想是要找到某函式的最大值,最好的方法是沿著該函式的梯度方向探尋。該公式將一直被迭代執行,直到達到某個停止條件為止,比如迭代次數達到某個指定值或者演算法達到某個可以允許的誤差範圍。
那麼現在開始求解J(θ)對θ的偏導,求解如下(數學推導):在這裡插入圖片描述
在這裡插入圖片描述
知道了,梯度上升迭代公式,我們就可以自己編寫程式碼,計算最佳擬合引數了。

3.python3實戰程式碼

https://blog.csdn.net/anneqiqi/article/details/64125186
首先,匯入numpy模組,此種匯入方式僅適合寫小的程式。首先定義便利函式和sigmoid函式。
在這裡插入圖片描述
然後,定義我們的主角,邏輯迴歸演算法函式。此演算法用於訓練我們的資料集。
在這裡插入圖片描述
此部分為畫圖部分,定義畫圖函式
在這裡插入圖片描述
緊緊連線上一張
在這裡插入圖片描述
這樣我們的邏輯迴歸模型已經搭建完畢,接下來,只需要簡單的幾句測試程式碼,便可以達到效果。
測試程式碼如下:在這裡插入圖片描述
下圖便是我們訓練出來的結果,這條線就是擬合數據後的分割線。
在這裡插入圖片描述

拓展:梯度上升演算法的改進版本

隨機梯度上升演算法

先上程式碼:![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20181122011514220.png?x-oss-process=image/watermark,type_ZmFuZ3poZ
該演算法第一個改進之處在於,alpha在每次迭代的時候都會調整,並且,雖然alpha會隨著迭代次數不斷減小,但永遠不會減小到0,因為這裡還存在一個常數項。必須這樣做的原因是為了保證在多次迭代之後新資料仍然具有一定的影響。如果需要處理的問題是動態變化的,那麼可以適當加大上述常數項,來確保新的值獲得更大的迴歸係數。另一點值得注意的是,在降低alpha的函式中,alpha每次減少1/(j+i),其中j是迭代次數,i是樣本點的下標。第二個改進的地方在於跟新迴歸係數(最優引數)時,只使用一個樣本點,並且選擇的樣本點是隨機的,每次迭代不使用已經用過的樣本點。這樣的方法,就有效地減少了計算量,並保證了迴歸效果。
在這裡插入圖片描述
呼叫程式碼如上圖,得到的結果如下圖:
在這裡插入圖片描述

由於改進的隨機梯度上升演算法,隨機選取樣本點,所以每次的執行結果是不同的。但是大體趨勢是一樣的。我們改進的隨機梯度上升演算法收斂效果更好。為什麼這麼說呢?讓我們分析一下。我們一共有100個樣本點,改進的隨機梯度上升演算法迭代次數為150。
而且看橫軸,可以看出隨機梯度上升演算法收斂的時間也變短了。

4.總結

Logistic迴歸的優缺點

優點:實現簡單,易於理解和實現;計算代價不高,速度很快,儲存資源低。
缺點:容易欠擬合,分類精度可能不高。

作者:小新新
來源:CSDN
版權宣告:本文為博主原創文章,轉載請附上博文連結!歡迎轉載!


參考文獻:

[1]《機器學習實戰》的第五章內容
[2] 吳恩達機器學習視訊
[3]:Python中scatter函式引數詳解
https://blog.csdn.net/anneqiqi/article/details/64125186