【小白學AI】線性迴歸與邏輯迴歸(似然引數估計)

忽逢桃林發表於2020-08-02

文章轉自【機器學習煉丹術】

線性迴歸解決的是迴歸問題,邏輯迴歸相當於是線性迴歸的基礎上,來解決分類問題。

1 公式

線性迴歸(Linear Regression)是什麼相比不用多說了。格式是這個樣子的:
\(f_{w,b}(x)=\sum_i{w_ix_i}+b\)

而邏輯迴歸(Logistic Regression)的樣子呢?
\(f_{w,b}(x)=\sigma(\sum_i{w_ix_i}+b)\)

要記住的第一句話:邏輯迴歸可以理解為線上性迴歸後加了一個sigmoid函式。將線性迴歸變成一個0~1輸出的分類問題。

2 sigmoid

sigmoid函式就是:
\(\sigma(z)=\frac{1}{1+e^{-z}}\)

函式影像是:

線性迴歸得到大於0的輸出,邏輯迴歸就會得到0.5~1的輸出;
線性迴歸得到小於0的輸出,邏輯迴歸就會得到0~0.5的輸出;


這篇文章的重點,在於線性迴歸的引數估計使用的最小二乘法,而而邏輯迴歸使用的是似然估計的方法。(當然,兩者都可以使用梯度下降的方法)。


3 似然估計邏輯迴歸引數

舉個例子,現在我們有了一個訓練資料集,是一個二分類問題:

上面的\(x^1\)是樣本,下面的\(C_1\)是類別,總共有兩個類別。

現在假設我們有一個邏輯迴歸的模型:
\(f_{w,b}(x)=\sigma(\sum_i{w_ix_i}+b)\)
那麼\(f_{w,b}(x^1)\)的結果,就是一個0~1的數,我們可以設定好,假設這個數字就是是類別\(C_1\)的概率,反之,1減去這個數字,就是類別\(C_2\)的概率。

似然簡單的理解,就是讓我們上面的資料集出現的概率最大

我們來理解一下:

  1. \(x_1\)\(C_1\)的概率是\(f_{w,b}(x^1)\);
  2. \(x_2\)\(C_1\)的概率是\(f_{w,b}(x^2)\);
  3. \(x_3\)\(C_2\)的概率是\(1-f_{w,b}(x^3)\);
  4. ……
  5. \(x_N\)\(C_1\)的概率是\(f_{w,b}(x^N)\);

樣本之間彼此獨立,那麼上面那個資料集的概率是什麼?是每一個樣本的乘積,這個就是似然Likelihood:

我們希望這個w,b的引數估計值,就是能獲得最大化似然的那個引數。也就是:

加上負號之後,就可以變成最小化的問題。當然,加上一個log並不會影響整個的w,b的估計值。因為\(L(w,b)\)最大的時候,\(log(L(w,b))\)也是最大的,log是個單調遞增的函式。所以可以得到下面的:
【注意:所有的log其實是以e為底數的自然對數】

log又可以把之前的乘積和,轉換成加法。
\(log(L(w,b))=log(f(x^1))+log(f(x^2))+log(1-f(x^3))...\)

然後,為了更加簡化這個算是,我們將\(C_1, C_2\)數值化,變成1和0,然後每一個樣本的真實標籤用\(y\)來表示,所以就可以得到:
\(log(L(w,b))=\sum_i^N{ylog(f(x^i))+(1-y)log(1-f(x^i))}\)
【有點像是二值交叉熵,然而其實就是二值交叉熵。。】

  • 當y=1,也就是類別是\(C_1\)的時候,這個是\(log(f(x^i))\)
  • 當y=0,也就是類別是\(C_2\)的時候,這個是\(1-log(f(x^i))\)

所以其實我們得到的損失函式是:
\(loss=-log(L(w,b))=-\sum_i^N{ylog(f(x^i))+(1-y)log(1-f(x^i))}\)

之前說了,要找到讓這個loss最小的時候的w和b,那怎麼找?
【無情萬能的梯度下降】

所以計算\(\frac{\partial loss}{\partial w}\),然後乘上學習率就好了。這裡就不繼續推導了,有耐心的可以慢慢推導,反正肯定能推出來的。
這裡放個結果把:
\(\frac{-\partial lnL(w,b)}{\partial w_i}=\sum_n^N{-(y^n-f_{w,b}(x^n))x_i^n}\)

  • 其中\(w_i\)為第i個要估計的引數,第i個特徵;
  • \(x^n_i\)是第n個樣本的第i個特徵的值;
  • \(y^n\)是第n個樣本的真實類別,0或者1。

相關文章