首頁  >  文章  >  後端開發  >  Python中的梯度下降演算法詳解

Python中的梯度下降演算法詳解

WBOY
WBOY原創
2023-06-10 14:30:152603瀏覽

梯度下降(Gradient descent)是一種常用的最佳化演算法,在機器學習中被廣泛應用。 Python是一門很好的資料科學程式語言,也有很多現成的函式庫可以實現梯度下降演算法。本文將詳細介紹Python中的梯度下降演算法,包括概念和實作。

一、梯度下降的定義
梯度下降是一種迭代演算法,用來最佳化函數的參數。在機器學習中,我們通常使用梯度下降來最小化損失函數。因此,梯度下降可以被認為是一種最小化函數的方法。梯度下降演算法可以用於任何可以計算梯度的系統,包括線性迴歸、邏輯迴歸、神經網路等等。

二、梯度下降的原理
梯度下降演算法的基本原理是找到一個函數的最小值。我們通常將函數的最小值看作是函數的參數(參數是指我們需要最佳化的變數)的函數中的最小值,因此,我們需要計算參數函數的導數。我們用導數來判斷函數目前的斜率,並將其與學習率相乘來決定我們的下一步應該往哪個方向前進。當函數的導數為零時,我們就找到了函數的最小值。在實際應用中,我們不需要保證能找到函數的全域最小值,只需要找到其局部最小值。

三、梯度下降演算法的步驟
1.初始化參數。我們需要將最佳化函數所需的參數設定為初始值,例如,將參數設為零或隨機數。
2.計算損失函數。使用給定的參數計算一個損失函數。
3.計算梯度。計算損失函數的梯度。梯度顯示了函數在目前參數下的斜率。
4.更新參數。根據梯度更新參數。更新後的參數將使損失函數更接近最優解。
5.重複步驟2至4,直到滿足停止條件。停止條件可以是達到一定的迭代次數,或是達到一定的最佳化程度。

四、Python實現梯度下降(批量梯度下降)
接下來,我們將介紹如何在Python中實現批量梯度下降演算法,批量梯度下降演算法是梯度下降演算法的一種形式,並假定我們有足夠的記憶體來一次處理所有的訓練樣本。

資料準備
我們使用sklearn的datasets內建資料集IRIS,來作為我們實現批量梯度下降的樣本資料。以下是我們需要用到的Python套件和導入資料集的程式碼:

from sklearn.datasets import load_iris
import numpy as np

iris = load_iris()
X = iris.data
y = iris.target

資料預處理
在進行批次梯度下降之前,我們需要對我們的資料進行規範化。這可以透過計算每個特徵的平均值和標準差來完成。

mean = np.mean(X,axis=0)
std = np.std(X,axis=0)
X = (X - mean)/std

定義損失函數
我們將使用平方誤差函數作為模型的損失函數。我們的損失函數為:

def loss_function(X,y,theta):
    m = len(y)
    predictions = np.dot(X,theta)
    cost = (1/(2*m)) * np.sum((predictions-y)**2)
    return cost

定義訓練函數
接下來我們定義函數來實作批次梯度下降演算法。

def gradient_descent(X,y,theta,learning_rate,num_iterations):
    m = len(y)
    cost_history = np.zeros(num_iterations)
    theta_history = np.zeros((num_iterations,theta.shape[0]))
    for i in range(num_iterations):
        prediction = np.dot(X,theta)
        theta = theta - (1/m)*learning_rate*(X.T.dot((prediction - y)))
        theta_history[i,:] = theta.T
        cost_history[i]  = loss_function(X,y,theta)
        
    return theta, cost_history, theta_history

運行訓練函數
我們現在運行模型訓練函數,並輸出最終模型的代價值和參數值,然後將訓練資料擬合到模型中。

theta = np.zeros(X.shape[1])
learning_rate = 0.1
num_iterations = 1000
theta,cost_history,theta_history = gradient_descent(X,y,theta,learning_rate,num_iterations)

print('Theta: ',theta)
print('Final cost/MSE: ',cost_history[-1])

五、總結
在本文中,我們講解了Python中的梯度下降演算法,包括概念和實作。我們首先介紹了梯度下降演算法的定義和原理,然後詳細描述了梯度下降演算法的步驟。最後,我們實現了批量梯度下降並運行樣本資料集,獲得了訓練後的模型和其代價。

梯度下降演算法是機器學習中的必備知識點,而Python又是資料科學中使用最廣泛的程式語言之一,因此學習Python中的梯度下降演算法是非常重要的。希望這篇文章對您學習Python梯度下降演算法有所幫助。

以上是Python中的梯度下降演算法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn