當前位置:
首頁 > 教育 > 線性回歸和梯度下降的介紹

線性回歸和梯度下降的介紹

線性回歸用於找到特定數據集的最佳擬合線。如果目標是預測,預測或減少誤差,則可以使用線性回歸將預測模型擬合到響應值的觀察數據集(例如測試結果)和解釋性(例如研究測試的時間)變數。在從訓練的數據集中獲得擬合模型之後,我們可以對任何新的解釋變數進行預測(例如,根據研究學生的學習時間來預測學生的考試成績)。

但是我們的程序如何在隨機數據集中找到最合適的線條,如果我們有兩組數據怎麼辦?一個是中學生考試成績和學習時間的數據,另一個是高中學生的數據集。人工智慧的目的是給程序一個問題並讓他來為我們解決。但是我們還需要一些東西來讓我們的程序找到數據本身的最佳擬合線。

解決方案是使用梯度下降演算法。梯度下降演算法是用於找到函數最小值的一階迭代優化演算法。通俗地說,演算法將允許我們遍歷梯度,這最終將幫助我們找到最佳擬合線,無論使用哪個數據集。

線性回歸示例

假設我們有以下數據集:

線性回歸和梯度下降的介紹

打開今日頭條,查看更多圖片

數據集

如果我們想通過這個數據繪製一條直線,我們將使用斜率截距公式y = mx + b ,其中m代表斜率值,b代表截距。為了找到我們數據的最佳線,我們需要找到最佳的m和b值。

誤差函數

為了找到上述數據的最佳擬合線,我們需要定義一個誤差函數。這種類型的誤差函數更具體地稱為殘差平方和或預測誤差平方和。誤差函數衡量數據集與估計模型(我們預測的最佳擬合線)之間的差異。

線性回歸和梯度下降的介紹

從線到典型數據點的垂直距離等於線與該y值之間的誤差,也稱為殘差。

線性回歸和梯度下降的介紹

殘餘平方和誤差函數

y是被預測變數的第i個值,x是解釋變數的第i個值,mx + b是y的預測值。這個函數是平方的,以確保在求和之前值是正數。然後平方估計值的總和除以數據集中N個值的總數。下面的代碼是python中的錯誤函數。

線性回歸和梯度下降的介紹

python中的錯誤函數

參數包括y軸截距b,斜率m和(x,y)點的2D數組points

為了得到誤差,函數將斜率m和截距b作為參數。然後通過它的2D數組points,並存儲在誤差平方的totalError,具有以下的預測值m和b ,x和y在for循環後每一次迭代。然後在退出for循環之後,除以totalErrorpoints數組中的值的數量float(len(points)),並將其作為浮點數返回。現在我們需要找出如何讓我們的程序找到b和m的最佳值,這就是梯度下降的作用。

利用梯度下降法可以最大限度地減少誤差函數

下面的圖像是我們數據集的漸變。為了計算梯度,我們需要區分我們的誤差函數。梯度圖記錄了3個值,誤差函數中計算的誤差,y軸截距b 和斜率m 。梯度上的每個點代表y軸截距b和斜率m,用於匯總數據集中的所有值x和y值。我們可以看到佔據誤差最小的區域是梯度斜率最平坦的地方(底部的藍色區域)。

線性回歸和梯度下降的介紹

漸變的示例

為了找到最適合我們數據集的行,我們的程序將需要最小化錯誤函數計算的誤差。這可以通過對誤差函數對m和b求偏導數來實現。通過這樣做,我們將獲得梯度特定點處的斜率。這意味著如果斜率接近於零,則它們必須接近具有提供最適合我們數據集的線的m和b值。要使用梯度下降找到函數的局部最小值,它將採用與當前點處函數的梯度的負值成比例的步驟。所以它總是從梯度的最陡部分移動到最平的部分。

線性回歸和梯度下降的介紹

關於m和b的誤差函數的偏導數

梯度下降的代碼發布在下圖中。在這裡你可以看到step_gradient函數接受4個參數b的當前值b_current,m的當前值m_current,我們數據集的2D數組points,以及learning_rate。learning_rate決定了我們的學習速度。如果learning_rate太高,在梯度中將採取過大的步驟,但可能會錯過最小值。另一方面,如果learning_rate太低,則需要很長時間才能達到最小值(如果有的話)。

step_gradient函數遍歷整個數據集,每次迭代使用x和y的值,分別求出b和m的梯度。然後,梯度的值與learning_rate相乘,分別從b_current和m_current中減去,賦值給new_b和new_m,然後返回gradient_descent_runner函數。

線性回歸和梯度下降的介紹

gradient_descent_runner允許程序找到函數本身的最小值。該函數接受以下參數點:starting_b = 0、starting_m = 0、learning_rate和num_iteration = 1000。然後for循環將為num_interations設置的任何值重複調用step_gradient。

線性回歸和梯度下降的介紹

程序不斷更新的新值b和m直到他們發現具有最低梯度,從而產生對數據進行最佳擬合線的值。在我們的程序運行完所有迭代之後,它將把b和m的值返回給我們的main函數。

線性回歸和梯度下降的介紹

每次迭代的梯度下降誤差

全盤分析

在我們的main函數中,我們聲明了以下變數; points,learning_rate,initial_b,initial_m,num_iterations,和數組的最終值b和m。

線性回歸和梯度下降的介紹

main 函數

調用gradient_descent_runner啟動梯度下降,因此我們可以實現數據集的線性回歸。在控制台中列印值後。我們已經實現了梯度下降的線性回歸。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!

TAG: |