梯度下降(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中文網其他相關文章!