機器學習蝦扯淡之Logostic回歸
0x00 前言
大家好我是小蕉。上一次我們說完了線性回歸。不知道小伙伴有沒有什么意見建議,是不是發(fā)現(xiàn)每個字都看得懂,但是全篇都不知道在說啥?哈哈哈哈哈哈,那就對了。
這次我們來聊聊,有小伙伴說,那我如果我么想把結果分為兩撥,就這樣的,咋辦?
大蕉大筆一揮。啊這不是分好了嗎?
我敢說,現(xiàn)在百分之很多十(目測七八十)說自己在做人工智能的,都只是用Logistic回歸在做分析。
“就你事多。我不會分。”
“想學啊你?我教你啊。”
0x01 Logistic是啥玩意
想法大概是這樣。把數(shù)據(jù)映射到Logistic函數(shù)上邊,大于0.5我們就認為是類別y1 = 0,小于0.5我們認為是類別y2 = 1。
- y ∈ {0 , 1}
這個函數(shù)長啥樣?就長下面這樣。
- π (x) = 1 / ( 1 + exp (-x))
所以我們在這種情況下,觀察到各個樣本的概率長下面這樣。
- P( Y = 1 | x ) = 1 / ( 1 + exp (-x))
- P( Y = 0 | x ) = 1 / ( 1 + exp (x))
所以比值比ODD 長這樣
- odd = P( Y = 1 | x ) / P( Y = 0 | x ) = exp (x)
對數(shù)比值比剛剛好
- ln odd = x
你說神不神奇!!當然我們不僅僅只有一個參數(shù)是吧?所以對原始數(shù)據(jù)變成
- g(x) = θ.T * x + b
其中θ是一個N維的向量,跟每一個樣本X的維度保持一致這樣。
所以LR的映射函數(shù)做一下線性變換就變成這樣了。
- π (x) = 1 / ( 1 + exp (-g(x)))
到這里,我們已經(jīng)知道Logistic回歸是什么鳥了,其實就是把數(shù)據(jù)映射到Logistic函數(shù)上,根據(jù)概率來進行分類。
0x02 極大似然估計
那我們要怎么得到損失函數(shù)loss呢?不要急跟大蕉一步一步來。
上面我們已經(jīng)看到了每個樣本的概率。現(xiàn)在說一下極大似然估計是什么東西。極大似然估計,就是我們裝作這些個參數(shù)啊,我們老早就知道了,然后借此來估計現(xiàn)在這些樣本被觀察到的概率。你腦子wata啦?既然這些樣本都已經(jīng)發(fā)現(xiàn)了,所以實際概率肯定是***啊!!概率要越大越好越大越好,而又只是一個估計值,所以我們就叫它極大似然估計啦。
所以我們觀察到樣本的概率是
- P = (p ^ Y) * (( 1 - p) ^ ( 1 - Y ))
怎么容易一點去理解這行蜈蚣一樣的公式呢?把Y的值0跟1代進去就行了,你就懂了,Y等于0的時候就是(1 - p ),y等于1時就是 p。就是這么簡單。
下面是重點。敲黑板,劃重點!!!我就是卡在這里想了很多天,完全不知道損失函數(shù)怎么來的!
因為所有樣本都是相互獨立的,所以他們的聯(lián)合概率分布是他們的概率乘積。
- L(θ) = ∏ (p ^ yi) * ( (1 - p) ^ (1 - yi))
yi是每個樣本的實際Y值。我們這里要求***值嘛,那要變成損失函數(shù)咋變?我們知道這個值永遠是 ( 0 , 1)的,所以直接加個負號,本來求***就變成求最小了。
- ∴ loss = - L(θ)
當然我們習慣這樣加,看起來比較高端,m是樣本的個數(shù)
- ∴ loss = - 1/m * L(θ)
無所謂,原理一樣的。
乘法是很消耗資源的,我們可以把它轉換成對數(shù),這樣所有的乘法都變成加法啦!!而且而且函數(shù)的性質(zhì)不變。所以最終的損失函數(shù)長這樣。
- loss(θ) = - log L(θ)
下面開始我們用Andrew NG大大的方式變換一下好了,僅僅是為了后面比較好算而已。
- P = p ^ (y + 1) / 2 * (1 - p) ^ - (y - 1) / 2
- Y ∈ {-1,1}
跟上面沒什么本質(zhì)的差別,只是把Y的值域變成-1跟1了。下面就是普通的公式變換。
0x03 損失函數(shù)咋來的
- l(θ) = - ∑ ln(p ^ (yi + 1) / 2 * (1 - p) ^ - (yi - 1) / 2)
進行l(wèi)og變換,冪乘變成乘法。
- = - ∑ (yi + 1) / 2 * lnp - (yi - 1) / 2 * ln(1 - p) )
把p代進去,也就是把把負號放到P里邊了。變成直接取倒數(shù)。就得到下面這個
- = ∑ (yi + 1) / 2 * ln(1 + exp (-g(xi)) - (yi - 1) / 2 * ln( 1 + exp (g(xi)))
觀察一下,就可以看出來。自己代進去就知道啦。
- ∴ 當yi = 1 時,l(θ) = ∑ ln(1 + exp ( - g(xi))
當yi = -1 時,l(θ) = ∑ ln(1 + exp ( g(xi))
所以最終的損失函數(shù)長這樣。
- l(θ) = ∑ ln(1 + exp ( - yi * g(xi))
好了,到這里我們的推導就結束了,接下來就按照梯度下降算法去求最小值就好啦。
0x04 怎么用呢
然后我們就可以用最終得到的參數(shù)進行預測,大于0就當成類別Y1 ,即Y = 1,小于0當成類別Y1,即Y = -1。當然,這只能用于二分類。
那這玩意有什么用呢?應用場景比比皆是。
用戶點擊還是不點擊?客戶是欺詐還是沒欺詐?客戶逾期還是不逾期?這個產(chǎn)品是推薦還是不推薦?
傳說中的人工智能預測高端引擎就出來了,小伙伴自己試試看把。
0x05 結束語
今天就醬,掰~跪在地上求不掉粉。
【本文為51CTO專欄作者“大蕉”的原創(chuàng)稿件,轉載請通過作者微信公眾號“一名叫大蕉的程序員”獲取授權】