機器學習從入門到放棄之邏輯迴歸

分類問題

回到本系列的第一篇文章機器學習從入門到放棄之KNN算法,在裏面有這樣的一個問題git

分類圖
黃點表明1類電影的分佈,綠色表明0類電影的分佈,紫色表明須要分類的電影樣本。
那麼該怎麼判別紫色的那顆點所在的類別呢?程序員

以前給出的是KNN算法,經過計算紫色點都周邊的劇場的長短,來判斷紫色點屬於哪一個類別。如今有這樣一種極端狀況,黃點和綠點在紫點周圍呈圓周分佈,距離同樣,咋辦?github

圖片描述

圖畫得不是太好,你們理會個人意思就行。算法

在這種狀況,假如像下圖這樣的狀況,就容易處理得多了。segmentfault

圖片描述

紅線的下方是黃色種類,上方時綠色種類。微信

這種狀況咱們稱之爲線性分類,關於如何擬合出這條線程函數下面會講述。如今先來講說,既然這叫線性分類,那麼必然會有非線性的狀況啊,那咋辦呢?機器學習

沒錯,若是特徵能夠被線性函數所有表達,這天然是理想狀況,但實際問題中更多的非線性分類。
這時,咱們須要將線性函數轉換爲非線性函數。那怎麼轉換呢,很簡單,將線性函數(假設叫z),扔到某一非線性函數f(x)內,獲得新的表達式y = f(z),就是咱們所需的非線性分類器了,而f(x)也就做激活函數,它有不少種,本文只介紹邏輯迴歸所使用到的sigmoid函數,其表達式是函數

sigmoid

其圖像有一個漂亮的S型學習

sigmoid圖像

可見在x的取值範圍足夠大的時候,其從0變1的過程能夠忽略不計,所以,咱們習慣的把>0.5歸爲1類,<0.5歸爲0類,那麼剛好是0.5怎麼辦?這個機率是極低的,若是真的是0.5,那就隨機歸類,而後出門買張彩票吧,說不定就不用繼續當程序員了。 (/≥▽≤/)spa

上面函數圖像引用雲深不知處的博客

算法介紹

回到表達式上,可知函數的變量是z其他都是常量,所要要求解該分類函數的值,就是要肯定z的值而z是線性方程,基本的數學知識不難知道,

$$z=a1x1+a2x2……an*xn$$

其中[x1……xn]是輸入向量,因此訓練的過程就是肯定於[a1,a2……an]的值,使得該表達式對於多個輸入向量的輸出值正確率最高。

下面開始講述求最佳的[a1,a2……an]的方法

顯然,咱們能夠設計一個函數來衡量[a1,a2……an]是否最佳,好比說這樣的

$$J(a) = sum_{n=0}(f_a(xi)-y)^2$$

顯然當J(a)達到最小值時,a的值最佳。方法以下,

  • 初始化weight,可使用隨機值

  • 代入式子獲得err = y - predict

  • weight = weight + alpha * error * x_train[i],其中alpha稱爲學習速率,過小會影響函數的收斂速度,太大剛纔就不收斂了。

  • 爲了解決上述問題,在《機器學習實戰中》使用了動態更新alpha的方法,式子爲alpha = 4/(1+i)+0.01

上述修改weight的過程稱爲梯度降低法,其中我故意略去了數學證實部分,須要的同窗請自行查找專業資料。

代碼實現

github

文章描述若有錯誤,歡迎指正。

關注我

個人我的公衆號開啓啦,微信公衆號搜索肥兔子的碎碎語,你能查看到更多學習心得的分享噢⊙ω⊙。

相關文章
相關標籤/搜索