<div>grad f(x, y)</div>
<div>在數學和物理學中,分別可稱為梯度或導數中國字叫做"梯度",表示一個多變量函數f(x, y)相對于其輸入自變量x和y的增長速率最快的方向,以及該方向的增長速率。梯度被廣泛應用于優化算法和微積分中,有助于確定函數的最大值、最小值以及在給定數據集上的最佳擬合曲線等。</div>
例1:
<div>假設有一個二維向量函數f(x, y) = x^2 + 3y。我們可以使用Python的NumPy庫來計算f(x, y)的梯度。以下是一個示例代碼:</div>import numpy as np <br> def f(x, y): return x**2 + 3*y <br> x = np.linspace(-5, 5, 10) # 創建-5到5之間的等間隔數組 y = np.linspace(-5, 5, 10) <br> X, Y = np.meshgrid(x, y) # 使用x和y創建一個網格 <br> Z = f(X, Y) # 計算f(x, y)在網格上的值 <br> grad_x, grad_y = np.gradient(Z, x, y) # 計算f(x, y)在網格上的梯度 <br> print(grad_x) print(grad_y)
在這個例子中,我們定義了一個函數f(x, y) = x^2 + 3y,并使用linspace方法創建了一個-5到5之間的等間隔數組x和y。然后,我們使用meshgrid方法將x和y合并為一個網格。接下來,我們通過調用函數f(X, Y)來計算該函數在網格上的值。最后,我們使用gradient方法計算了函數f(x, y)在網格上的梯度,并打印出來。
例2:
<div>在機器學習中,梯度還用于優化算法,特別是梯度下降算法。讓我們以線性回歸為例說明如何使用梯度下降來找到最佳擬合直線的斜率和截距。</div>import numpy as np import matplotlib.pyplot as plt <br> def gradient_descent(x, y, learning_rate, num_iterations): m = len(x) theta = np.zeros(2) <br> for iteration in range(num_iterations): y_predicted = theta[0] + theta[1]*x <br> theta[0] -= (2/m) * learning_rate * np.sum(y_predicted - y) theta[1] -= (2/m) * learning_rate * np.sum((y_predicted - y) * x) <br> return theta <br> x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 3, 4, 5, 6]) learning_rate = 0.01 num_iterations = 1000 <br> theta = gradient_descent(x, y, learning_rate, num_iterations) <br> plt.scatter(x, y) plt.plot(x, theta[0] + theta[1]*x, color='red') plt.xlabel('x') plt.ylabel('y') plt.show()
在這個例子中,我們定義了一個梯度下降函數gradient_descent,該函數接受輸入變量x和y,學習率learning_rate和迭代次數num_iterations。函數中初始化了斜率和截距的初始值為0。然后,在每次迭代中,我們通過計算預測值和實際值之間的誤差來更新斜率和截距。最后,我們使用Matplotlib庫繪制了數據的散點圖和最佳擬合直線。
:
<div>梯度(grad f(x, y))是一個多變量函數f(x, y)相對于其輸入自變量x和y的增長速率最快的方向,以及該方向的增長速率。它在優化算法和微積分中扮演著重要的角色。在這篇文章中,我們通過使用NumPy庫提供的函數和方法來計算函數的梯度,并通過編寫一個梯度下降算法的案例來說明梯度的應用。</div>