1. 程式人生 > >機器學習入門(四)迴歸演算法

機器學習入門(四)迴歸演算法

--------韋訪 20181010

1、概述

現在開始學習演算法了,從線性迴歸和邏輯迴歸開始。

2、線性迴歸概念

關於迴歸和分類的概念,我們在TensorFlow入門筆記第八講有說過,這裡直接複製過來,

分類問題:分類問題希望解決的是將不同的樣本分到事先定義好的類別中,比如判斷一個零件是否合格的問題就是一個二分類問題。手寫體數字識別問題是一個十分類問題(0~9十個數字)。

迴歸問題:迴歸問題解決的是對具體數值的預測。比如房價預測、銷量預測等。這些問題所需要預測的不是一個事先定義好的類別,而是任意實數。解決迴歸問題一般只有一個輸出節點,這個節點的輸出值就是預測值。

3、線性迴歸示例

現在來舉例,假設銀行貸款的額度有某個演算法,每個人貸款的額度只取決於他的工資和年齡,

那麼,年齡(X1)和工資(X2)就是兩個“特徵”,預測貸款額度(Y)就是“標籤”。

我們的目的是找到一條最優的擬合曲線,根據年齡和工資去預測貸款額度。

4、最小二乘法

假設θ1是年齡的引數,θ2是工資的引數,那麼,得到擬合曲線的公式為,

 真實值和預測值之間會存在一定差異,我們用ε來表示誤差,則對於每個樣本,

 誤差ε(i)是獨立的,並且服從均值為0,方差為θ2的正態分佈。

 由於誤差服從高斯分佈,得,

下面先來說一下似然函式的概念,在數理統計中,似然函式是一種關於統計模型中的引數的函式,表示模型引數中的似然性。似然性就是用於在已知某些觀測所得到的結果時,對有關事務的性質的引數進行估計。

也就是,什麼樣的引數,跟我們的資料組合後,恰好是真實值。將上面的公式帶入,得到,

 上式為何要進行一個累乘?因為θ引數要滿足所有的樣本。因為累加比累乘容易計算,又由

所以,對上式求對數,得到對數似然,式子如下, 

 由於是常量,而我們希望似然函式越大越好,那麼,就希望

越小越好,上式又稱為最小二乘法。

還沒完事啊,我們現在已經將問題簡化到求最小二乘法的最小值,怎樣求呢?讓它偏導等於0不就是了嘛。先將最小二乘法展開,

對其求偏導,

 得,

那麼我們怎麼評估預測值與真實值的差距呢?一般常用R2來評估,式子如下,

 

 R的值越接近1,說明模型擬合的越好。

5、梯度下降法

TensorFlow中有講過梯度下降法,其實它也是尋找一個引數θ使得J(θ)最小。最小二乘法的θ不一定有解,所以一般機器學習都是用梯度下降法,一步一步的迭代訓練,經過大量的迭代以後,找到最優解。

這裡說一下使用梯度下降常用的三種方法:

批量梯度下降:每次迭代都考慮所有樣本,這樣做容易得到最優解,但是速度很慢。

隨機梯度下降:每次找一個樣本,這樣迭代的速度很快,但是不一定每次都朝著收斂方法,效果比較差。

小批量梯度下降法: 每次迭代選擇一小部分資料來算,這樣就達到了一個速度和效果的平衡,我們在TensorFlow中訓練就是每次一個batch資料,一般來說,batch大一點,效果會比較好,但是實際應用中也要考慮記憶體和效率。

學習率的話,Tensorflow講過了就不多說了,一般設定的小些,如果不能收斂或者收斂效果不好,可以試著將學習率再設定更小。

6、邏輯迴歸

邏輯迴歸其實是個經典的二分類演算法。

我們從Sigmoid函式講起,公式如下,

 

 

Sigmoid函式其實我們在Tensorflow第八講的時候有講過,在那一講中,它是作為神經網路的啟用函式。

我們再來看一下這個函式,它的變數取值是任意實數的,但是它的值域卻為[0,1]。這樣,我們就可以將線性迴歸中得到的預測值對映到Sigmoid函式中,這樣就完成了從值到概率的轉換,這個不就是分類任務了嗎?我們將線性迴歸的預測值帶入,得到,

對於二分類任務,有, 

 整合上式得到,

上式中,y=0或y=1.

對上式求似然函式,則有,

 

 求對數似然數,則有,

 因為上式要應用梯度上升求最大值,我們引入

 將其轉化為梯度下降任務,然後對上式求偏導得,

得到上式偏導以後,我們就可以用它來更新引數了,

 

上式中,α其實就是更新的步長,

是更新的方向, 

 

說明要綜合考慮所有的m個樣本,其實就是一個小的batch。