文章轉自【機器學習煉丹術】
線性迴歸解決的是迴歸問題,邏輯迴歸相當於是線性迴歸的基礎上,來解決分類問題。
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\)的概率。
似然簡單的理解,就是讓我們上面的資料集出現的概率最大
我們來理解一下:
- \(x_1\)是\(C_1\)的概率是\(f_{w,b}(x^1)\);
- \(x_2\)是\(C_1\)的概率是\(f_{w,b}(x^2)\);
- \(x_3\)是\(C_2\)的概率是\(1-f_{w,b}(x^3)\);
- ……
- \(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。