教程:採用梯度下降算法實現線性回歸!

點擊上方關注,All in AI中國

在這個教程中,你可以瞭解梯度下降算法將如何工作,並在python中從頭開始實現。首先我們看一下線性迴歸是什麼,然後定義損失函數。我們學習了梯度下降算法的工作原理,最後我們將在給定的數據集上實現它,並進行預測。

教程:採用梯度下降算法實現線性迴歸!

在每次迭代時更新m和c的值以獲得最優解

線性迴歸

在統計學中,線性迴歸是一種線性方法,用於對因變量與一個或多個自變量之間的關係進行建模。設X為自變量,Y為因變量。我們將在這兩個變量之間定義一個線性關係,如下所示:

教程:採用梯度下降算法實現線性迴歸!

教程:採用梯度下降算法實現線性迴歸!

這是你在高中學習的線性方程。m是直線的斜率,c是y截距。如今我們將使用這個方程用給定的數據集訓練我們的模型,並預測任何給定X值的Y值。我們今天的挑戰是確定m和c的值,使得對應於這些值的線是最佳擬合直線或給出最小誤差。

損失函數

損失是我們預測的m和c值的誤差。我們的目標是最小化這個誤差,以獲得最準確的m和c值。

我們將使用均方誤差函數來計算損失。這個函數有三個步驟:

  1. 對於給定x,找到實際y和預測y值之間的差值(y=mx+c)。
  2. 把這個差值進行平方。
  3. 找出X中每個值的平方均值。
教程:採用梯度下降算法實現線性迴歸!

均方誤差方程

這是yi實際值,ȳ i是預測值。讓我們替換ȳ i的值:

教程:採用梯度下降算法實現線性迴歸!

替換 ȳ i的值

所以我們將誤差平方並找出均值。因此,名稱均方誤差。現在我們已經定義了損失函數,讓我們進入有趣的部分 - 最小化它,並找到m和c。

梯度下降算法

梯度下降是尋找函數最小值的迭代優化算法。這裡的函數是我們的損失函數。

瞭解梯度下降

教程:採用梯度下降算法實現線性迴歸!

說明梯度下降算法的工作原理

想象一個山谷和一個沒有方向感的人想要到達山谷的底部。當斜坡陡峭時,他沿著斜坡走下坡時,步幅較大,當斜坡不那麼陡峭時,步幅較小。他根據自己目前的位置決定下一個位置,並在他到達山谷底部時停下來,這是他的目標。

讓我們嘗試將梯度下降算法應用於m和c,並逐步逼近它:

1.最初讓m = 0和c = 0。設L是我們的學習率。這可以控制m值隨每一步的變化程度。 L可以是0.0001的這樣小的數值,以獲得良好的準確性。

2.計算損失函數相對於m的偏導數,並插入其中x,y,m和c的當前值,得到導數值D。

教程:採用梯度下降算法實現線性迴歸!

關於m的導數

Dc 是相對於m的偏導數的值。類似地,我們找到關於c,Dc的偏導數:

教程:採用梯度下降算法實現線性迴歸!

關於c的導數

3.現在我們使用以下等式更新m和c的當前值:

教程:採用梯度下降算法實現線性迴歸!

4.我們重複這個過程,直到我們的損失函數是一個非常小的值或理想情況下為0(這意味著0誤差或100%準確度)。我們現在剩下的m和c的值將是最佳值。

現在回到我們的類比,m可以被認為是圖中人員的當前位置。D等於斜率的陡度,L是他移動的速度。現在我們使用上面的等式計算的m的新值將是他的下一個位置,並且L×D將是步幅的大小。當斜率更陡(D更大)時,他需要邁出更大的步幅,當它更陡(D更小)時,他邁出更小的步幅。最後他到達山谷的底部,相當於我們的損失= 0。

現在有了m和c的最佳值,我們的模型已經準備好進行預測了。

實施模型

現在讓我們將上面的所有內容轉換為代碼並查看我們的模型!

教程:採用梯度下降算法實現線性迴歸!

教程:採用梯度下降算法實現線性迴歸!

教程:採用梯度下降算法實現線性迴歸!

梯度下降算法是機器學習中最簡單、應用最廣泛的算法之一,主要是因為它可以應用於任何函數來優化它。學習它為掌握機器學習奠定了基礎。你可以在這裡找到數據集和代碼:

https//github.com/chasinginfinity/ml-from-scratch/tree/master/02%20Linear%20Regression%20using%20Gradient%20Descent

教程:採用梯度下降算法實現線性迴歸!


分享到:


相關文章: