1. 程式人生 > >Machine Learning Series No.2 --Logistic Regression

Machine Learning Series No.2 --Logistic Regression

前言

每次上吳恩達老師的機器學習課,總是能帶給我一些不同的東西(恩,換句話說,也就是我之前都學的啥??)。這次終於開始寫邏輯迴歸了,邏輯迴歸真的是一個非常了不起的演算法,恩,學到後來你會發現,誒,怎麼哪裡都有它?
這裡首先向強調的一點是,邏輯迴歸是一個線性分類器,用做分類的,而且是線性的,千萬不要以為sigmoid函式是非線性的,它就是非線性的了。

看一個演算法,照李航老師所說,你應該看三部分:模型、策略、演算法。
其實看的挺累的,我每次都記不住,所以導致我學的真的有點凌亂。
最近在不斷的完善不斷的完善,我覺得在看一個演算法之前,可以先想以下三個問題:

  1. 這個演算法是幹嘛的?分類的?迴歸的?聚類的?首先搞清楚這個演算法的目的是什麼。由此可得其原始資料的大致形式。
  2. 這個演算法的求解方式是什麼?如果是分類,那他的分類超平面如何定義?迴歸,它的學習策略是如何計算殘差的?如果是聚類,樣本點之間的距離如何計算?
  3. 這個演算法如何學習?可能是解析解,可能是梯度下降等方法?

經過這三個部分你就能很好的瞭解,至少是清楚一個演算法的結構了。

邏輯迴歸

  • 目的是什麼
    恩,首先還是先要明確這個演算法是幹嘛的,再三強調,邏輯迴歸是用來做二分類的,是一個線性分類器。
    首先來看一下效果:

    邏輯迴歸效果
    邏輯迴歸效果

    這裡不同顏色指的是不同類別,中間的線定義的是一個分離超平面,該線兩邊設定為不同的類別。當然,這裡正確率很明顯不是100%,但是沒關係,我們這裡主要是強調有一個分離超平面是用來分類的。

也就是說,我們的目的是為了得到這樣的一個分離超平面,去對資料進行分類。

  • 求解方式

    求解方式是什麼呢?也就是我們想要得到這個分離超平面,那要怎麼做?

    一般說來,我們有一個sigmoid函式,我們認為將x和引數w輸入到該函式中,能得到一個該樣本分類為1的概率。(實際上並不是隨意認為的,有嚴格的數學推導,詳情請見sigmoid函式推導。)


    hw(x)=P(y=1|x;w)=11+ewTx

    P(y=1|x;w)>0.5時,我們就將它預測為類別1,否則預測為類別0。
    實際上,

    P(y=1|x;w)>0.511+ewTx>0.5wTx>0

    所以最終我們可以得到,分離超平面的方程式其實就是

    wTx=0

    所以我們的分離超平面就這麼定義出來了,那麼怎樣求這個w便是我們的演算法部分了,也就這個演算法是怎麼學習的?
  • 演算法如何學習?
    根據我們對引數進行估計的方法:極大似然估計法對引數w進行估計。
    首先定義極大似然函式:


    L(w)=P(y=1|x;w)yiP(y=0|x;w)1yi

    令:π(x)=P(y=1|x;w),則1π(x)=P(y=0|x;w),則有:

    L(w)=π(x)yi(1π(x))1yi

    對極大似然函式取對數(極大似然法的一般步驟),同時將π(x)=P(y=1|x;w)=11+ewTx代入,可得:

    logL(w)=inyi(wxi)log(1+ewxi)

    最後對上述式子進行極大化,可以採用梯度上升或者牛頓方法,最終我們可以估計出w,從而得到分離超平面。當然如下損失函式所示,便是直接加了負號求最小。
  • 感知器的區別
    這裡我還是想寫這一點,因為我本人在學習的時候也是非常的困惑,既然邏輯迴歸也是使得wTx>0的時候預測為1,否則預測為另一個類,這個和支援向量機又有什麼區別呢?支援向量機不也是使得wTx>0的時候預測為1,否則預測為-1。兩者彷彿只是差在一個輸入時標籤的區別?
    其實兩者的差別挺小的,主要在於損失函式不同,即對應錯分樣本懲罰力度不同,而且邏輯迴歸多了一個概率解釋。可以參見部落格,裡面講的挺詳細的。
    感知器的損失函式為: