在機器學習中,我們的目標是找到一種能夠最好地描述數據的模型。例如,在迴歸問題中,我們希望找到一種函數,該函數能以一種對我們的目標變數(例如:銷售量、股票價格等) 的最佳估計的方式,描述輸入特徵(例如:廣告支出、市場狀況等)。
為了找到這樣的函數,我們需要定義一種衡量模型好壞的方式,這就是所謂的損失函數(或稱成本函數),或是讀者可以想成這是誤差函數,目標就是找出誤差最小的函數時的參數。對於迴歸問題,一種常見的損失函數是平方誤差損失,它計算的是模型預測和真實值之間的平方差的平均值。我們的目標是找到一組模型參數,使得損失函數的值最小。
梯度下降是一種用來找到這樣一組參數的優化算法。它從一個隨機選擇的起始點開始,然後反覆地計算損失函數在當前點的梯度(即方向和速度),並沿著梯度的反方向(就是說,沿著使損失函數值下降最快的方向) 更新模型的參數。這個過程一直持續到損失函數的值不再顯著下降(或者達到預定的迭代次數) 為止。
若是以上述誤差函數圖而言,斜率最低點就是在底部位置。讀者可以想像你現在站在一座大山的頂部,你的目標是找到一條路徑,讓你可以順利下山到達最低點,但是你被蒙上了眼睛,所以只能憑藉著腳下感覺去尋找路徑。
現在你開始嘗試一步一步地移動,你會嘗試各種方向的步伐,找到一種方式讓你感覺到下一步會讓你下降的最多,這就是你選擇前進的方向。你會重複這個過程,一直到你感覺不再下降,也就是你可能已經到達山谷的最底部。
這就是梯度下降法的基本概念。在這個比喻中,山頂是你一開始的猜測或者初始值,山谷的最底部就像是你想要找的答案,也就是使得誤差最小的那組參數值。你一步步往下走,就像是一次又一次的調整參數,試圖找到最佳解。而你嘗試找到讓你下降最多的方向,這就像是計算誤差函數的梯度,並依此更新你的參數。
機器學習模型的訓練過程其實就像這樣的一種嘗試過程,我們希望找到最佳的模型參數,讓預測的誤差最小。
SGDRegressor 就是一種利用梯度下降進行訓練的機器學習模型。SGD 英文全名是Stochastic Gradient Descent,意思是「隨機梯度下降」。它的「隨機」一詞源於每一步中用於計算梯度的樣本是隨機選取的,而不是用整個數據集。這種做法有兩個主要優點:一是計算效率高,因為每一步只需要一個(或一小批) 樣本;二是能夠避免陷入局部最小值,因為隨機性引入了一些噪聲,有助於算法跳出局部最優並找到全局最優。所以,簡單地說,SGDRegressor 是一種使用梯度下降算法進行訓練的線性模型。其語法和主要參數如下:
from sklearn.linear_model import SGDRegressor
⋯
model = SGDRegressor(loss, penalty=, alpha, max_iter)
上述可以建立一個SGDRegressor 的實例物件,各參數意義如下:
透過SGDRegressor( ) 我們可以讓機器學習運用梯度下降的方式來達到目標或預測結果,也能透過不同的參數設定來調整修正,降低誤差值。更多有關機器學習的方法與運用,歡迎參閱《機器學習最強入門 - 基礎數學/機率/統計邁向AI真實數據專題實作 - 王者歸來》獲取最完整的內容!
上文圖片及書摘由深智數位提供,內容取材自《機器學習最強入門 - 基礎數學/機率/統計邁向AI真實數據專題實作 - 王者歸來》。