在說邏輯迴歸前,仍是得提一提他的兄弟,線性迴歸。在某些地方,邏輯迴歸算法和線性迴歸算法是相似的。但它和線性迴歸最大的不一樣在於,邏輯迴歸是做用是分類的。html
還記得以前說的嗎,線性迴歸其實就是求出一條擬合空間中全部點的線。邏輯迴歸的本質其實也和線性迴歸同樣,但它加了一個步驟,邏輯迴歸使用sigmoid函數轉換線性迴歸的輸出以返回機率值,而後能夠將機率值映射到兩個或更多個離散類。java
若是給出學生的成績,比較線性迴歸和邏輯迴歸的不一樣以下:算法
以前介紹線性迴歸的時候,它的函數是這樣樣子的:編程
h(x)=θ0 + θ1 * x1 + θ2 * x2 + θ3 * x3 ...函數式編程
但這樣的函數是沒辦法進行分類的工做的,因此咱們要藉助一下其餘函數,那就是Sigmoid Function。函數
咱們先來看看這個Sigmoid Function長什麼樣,Sigmoid Function的數學公式是這樣子的:oop
若是表示在平面座標軸上呢,那它長這個樣子。
測試
這個Sigmoid Function能夠將線性的值,映射到[0-1]這個範圍中。若是映射結果小於0.5,則認爲是負的樣本,若是是大於0.5,則認爲是正的樣本。大數據
比方說要對垃圾郵箱進行分類,分垃圾郵箱和正常郵箱。當這個Sigmoid Function的計算出來後,小於0.5,則認爲是垃圾郵箱,大於0.5則是非垃圾郵箱。htm
原先線性迴歸的計算公式是這樣的:
那麼將這個z函數代入到Sigmoid Function中,OK,如今咱們就有了一個邏輯迴歸的函數了。
和線性迴歸同樣,邏輯迴歸也有代價函數。而且都是經過最小化Cost Function來求得最終解的。
咱們先來看單個點的狀況,
這個代價函數呢,叫作交叉熵,其中y(i)指的是預測的結果,而hθ(xi)指的是xi這個點本來的值。
那麼它具體是什麼意思呢,爲何叫作交叉熵?咱們舉兩個極端的例子看看就明白了:
這個時候,代價函數的加號右邊會被消掉,由於右邊(1-y(i))是0,左邊部分呢,由於hθ(xi)=1,故而log(1)=0。
y(i)log(hθ(xi)) = 1 * log(0) = 0
也就是說,若xi原始值是1,當預測值y=1的時候,代價函數是0的。這個也比較好理解,代價函數爲0就是說預測結果和原始結果徹底一致的,沒有半點出差錯。
此次的結果就和上面的反過來了,由於yi=0,因此左邊部分全軍覆沒,來看右邊,
(1-yi) * log(1-hθ(xi)) = 1 * log(0) = 0
由於1-hθ(xi),最終結果仍是等於0。
也就是說,這個損失函數,只要原始值與預測結果越相符,損失函數就越大,反之,損失函數就會越小。
以上說的只是一個點的狀況,實際的代價函數,是要計算全部點的損失函數的均值,以下所示:
和線性迴歸同樣,邏輯迴歸的解法也能夠經過梯度降低來進行求解。梯度降低的目的,是爲了最小化代價函數Cost function。
要求使用梯度降低,須要先求解偏導數,如下是求導數的一個具體過程:
而梯度降低的計算方法也和線性迴歸的計算方法是同樣的。只是其中的代價函數,換成了邏輯迴歸的代價函數。
其中,α右邊部分對應咱們上面對代價函數求偏導的結果。而α是用來控制訓練速率的,這個在線性迴歸那裏已經有說到,這裏就再也不介紹了。
最終就是對θj不斷迭代,直到損失函數降到最小,那就能夠求出咱們要的θ值了。
OK,今天介紹了線性迴歸和邏輯迴歸的區別,一樣都是迴歸分析,邏輯迴歸能完成分類任何的核心,就算使用了Sigmoid Function。
這裏留一個小問題,上面所述的邏輯迴歸,一般是僅僅可以進行二分類,那有沒有辦法來讓邏輯迴歸實現多分類呢?
下一次將闡述用邏輯迴歸進行多分類,以及正則化相關內容,並介紹sklearn的邏輯迴歸參數和用法!!
以上~~
推薦閱讀:
通俗得說線性迴歸算法(一)線性迴歸初步介紹
通俗得說線性迴歸算法(二)線性迴歸初步介紹
Scala 函數式編程指南(一) 函數式思想介紹
通俗地說決策樹算法(二)實例解析
大數據存儲的進化史 --從 RAID 到 Hadoop Hdfs
C,java,Python,這些名字背後的江湖!