機器學習的梯度下降迴歸法— SGDRegressor( )

2023/08/02閱讀時間約 6 分鐘

在機器學習中,我們的目標是找到一種能夠最好地描述數據的模型。例如,在迴歸問題中,我們希望找到一種函數,該函數能以一種對我們的目標變數(例如:銷售量、股票價格等) 的最佳估計的方式,描述輸入特徵(例如:廣告支出、市場狀況等)。

為了找到這樣的函數,我們需要定義一種衡量模型好壞的方式,這就是所謂的損失函數(或稱成本函數),或是讀者可以想成這是誤差函數,目標就是找出誤差最小的函數時的參數。對於迴歸問題,一種常見的損失函數是平方誤差損失,它計算的是模型預測和真實值之間的平方差的平均值。我們的目標是找到一組模型參數,使得損失函數的值最小。

梯度下降是一種用來找到這樣一組參數的優化算法。它從一個隨機選擇的起始點開始,然後反覆地計算損失函數在當前點的梯度(即方向和速度),並沿著梯度的反方向(就是說,沿著使損失函數值下降最快的方向) 更新模型的參數。這個過程一直持續到損失函數的值不再顯著下降(或者達到預定的迭代次數) 為止。

raw-image

若是以上述誤差函數圖而言,斜率最低點就是在底部位置。讀者可以想像你現在站在一座大山的頂部,你的目標是找到一條路徑,讓你可以順利下山到達最低點,但是你被蒙上了眼睛,所以只能憑藉著腳下感覺去尋找路徑。

現在你開始嘗試一步一步地移動,你會嘗試各種方向的步伐,找到一種方式讓你感覺到下一步會讓你下降的最多,這就是你選擇前進的方向。你會重複這個過程,一直到你感覺不再下降,也就是你可能已經到達山谷的最底部。

這就是梯度下降法的基本概念。在這個比喻中,山頂是你一開始的猜測或者初始值,山谷的最底部就像是你想要找的答案,也就是使得誤差最小的那組參數值。你一步步往下走,就像是一次又一次的調整參數,試圖找到最佳解。而你嘗試找到讓你下降最多的方向,這就像是計算誤差函數的梯度,並依此更新你的參數。

機器學習模型的訓練過程其實就像這樣的一種嘗試過程,我們希望找到最佳的模型參數,讓預測的誤差最小。

SGDRegressor 就是一種利用梯度下降進行訓練的機器學習模型。SGD 英文全名是Stochastic Gradient Descent,意思是「隨機梯度下降」。它的「隨機」一詞源於每一步中用於計算梯度的樣本是隨機選取的,而不是用整個數據集。這種做法有兩個主要優點:一是計算效率高,因為每一步只需要一個(或一小批) 樣本;二是能夠避免陷入局部最小值,因為隨機性引入了一些噪聲,有助於算法跳出局部最優並找到全局最優。所以,簡單地說,SGDRegressor 是一種使用梯度下降算法進行訓練的線性模型。其語法和主要參數如下:

from sklearn.linear_model import SGDRegressor

model = SGDRegressor(loss, penalty=, alpha, max_iter)

上述可以建立一個SGDRegressor 的實例物件,各參數意義如下:

  • loss:這定義了所使用的損失函數,預設情況下,這是「平方損失 ('squared_loss')」,這對應於普通最小平方迴歸。
  • penalty:這定義了所使用的懲罰項,預設情況是 "L2",這對應於線性模型的權重的平方和。其他可能的選項包括 "L1"(對應於權重的絕對值之和) 和"elasticnet"( 這是L1 和L2 的組合)。所謂的「懲罰」,我們可以把機器學習模型想像成一個小學生正在學習拼字。每當他學到一個新的單詞,他就會試著記住它。如果他只記住了幾個單詞,那他可能會很容易把它們拼對。但是如果他試圖記住太多的單詞,那麼他可能會開始混淆,並且拼錯一些單詞。在這裡,我們可以把「試圖記住太多的單詞」看作是模型「過擬合」訓練數據。也就是說,模型可能過於複雜,試圖擬合訓練數據中的每一個細節,甚至包括噪聲,而失去了對新數據的預測能力。這時候,我們就需要一種「懲罰」來限制模型的複雜度,讓它不要試圖記住太多的單詞。這就是所謂的 penalty。我們可以通過增加模型錯誤的「成本」或「懲罰」來阻止它記住太多的單詞。這樣,模型會更加專注於學習最重要的特徵,而不是訓練數據中的每一個細節。這就是我們在機器學習模型中使用懲罰或正則化的原因。
  • alpha:這是懲罰項的強度,預設是 0.0001。
  • learning_rate:這定義了學習率的調整策略。預設情況下,它被設置為「invscaling」,這表示使用的是逆比例縮放學習率,也就是說,每一步的學習率會隨著迭代次數的增加而減小。這種學習率的調整策略有一個特點,就是在演算法開始時,給予較大的學習率以快速接近最優解,然後隨著迭代次數增加,逐漸減小學習率,以防止在最優解附近震盪,更精確地找到最優解,這學習率將由預設的學習速率時間表來確定。其他選項包括 'constant'、'optimal'和 'adaptive'。如果學習率太高可能造成梯度無法進入局部最低點,也就是無法找出錯誤最小的參數。如果學習率太低,會造成需要比較多次的迭代,才可以進入局部最低點,也就是找出錯誤最小的參數。
  • max_iter:這是要執行的最大迭代次數,預設是 1000。
  • random_state:隨機種子值。


透過SGDRegressor( ) 我們可以讓機器學習運用梯度下降的方式來達到目標或預測結果,也能透過不同的參數設定來調整修正,降低誤差值。更多有關機器學習的方法與運用,歡迎參閱《機器學習最強入門 - 基礎數學/機率/統計邁向AI真實數據專題實作 - 王者歸來》獲取最完整的內容!

 

上文圖片及書摘由深智數位提供,內容取材自《機器學習最強入門 - 基礎數學/機率/統計邁向AI真實數據專題實作 - 王者歸來》。

天瓏:https://reurl.cc/aVj4oX

深智數位出版:《機器學習最強入門 - 基礎數學/機率/統計邁向AI真實數據專題實作 - 王者歸來》

深智數位出版:《機器學習最強入門 - 基礎數學/機率/統計邁向AI真實數據專題實作 - 王者歸來》


深智數位
深智數位
在大數據 (Big Data)、人工智慧 (Artificial Intelligence) 的發展年代,團隊憑著擁有技術與熱誠,在出版方面將豐富的科技知識給社會大眾。在訊息紛沓而來的氛圍,深智堅持讓讀者、學生、相關人員尋找最有效率、愉快的學習途徑,取得知識與專業。
留言0
查看全部
發表第一個留言支持創作者!