文章目錄
- 一、學習任務
- 二、學習内容
-
- 1.梯度下降法的一般求解步驟
- 2.梯度下降法手工求解極值
-
- 2.1.計算過程
- 3. Excel中利用梯度下降求解近似根
- 4.線性回歸問題求解
-
- 4.1.最小二乘法
- 4.2.梯度下降法
- 三、參考資料
一、學習任務
-
解釋微分、梯度的含義? 什麼是梯度下降法?
1)用梯度下降法手工求解
機器學習數學基礎一、學習任務二、學習内容三、參考資料
2)在Excel裡用牛頓法、或者梯度下降法求解 z=2(x-1)2+y2 的近似根。
2.線性回歸可以用最小二乘法求解,也可以用梯度下降法求解。調試、運作并詳細注解文中的梯度下降法求解回歸方程的python代碼,對獲得的結果與最小二乘法的結果進行對比。調試、運作并詳細注解文中的梯度下降法求解回歸方程的python代碼,對獲得的結果與最小二乘法的結果進行對比。
二、學習内容
1.梯度下降法的一般求解步驟
2.梯度下降法手工求解極值
2.1.計算過程
2.
3.
3. Excel中利用梯度下降求解近似根
1.設定表格内容
2.設定(x,y)的初始值為(2,1)
3.其他表格輸入計算公式
4.疊代結果
當學習率取0.1的時候,疊代2000多次仍舊沒有出現函數值為0的情況,是以更改學習率為0.15
4.線性回歸問題求解
4.1.最小二乘法
1.相關代碼
from sklearn import linear_model
import seaborn as sns
m = 20
X0 = ones((m, 1))
X1 = arange(1, m+1).reshape(m, 1)
X = hstack((X0, X1))
Y = np.array([
3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12,
11, 13, 13, 16, 17, 18, 17, 19, 21
]).reshape(m, 1)
2.線性回歸
model = linear_model.LinearRegression()
model.fit(X1,Y)
print("斜率=",model.coef_[0])
print("截距為=",model.intercept_)
3.結果繪制
def plot(X, Y, theta):
ax = plt.subplot(111)
ax.scatter(X, Y, s=30, c="blue", marker="s")
plt.xlabel("X")
plt.ylabel("Y")
x = arange(0, 21, 0.2)
y = model.intercept_+ model.coef_[0]*x
ax.plot(x, y)
plt.show()
plot(X1, Y, model.coef_[0])
4.2.梯度下降法
1.代價函數
2.相關代碼
from numpy import *
m = 20
X0 = ones((m, 1))
X1 = arange(1, m+1).reshape(m, 1)
X = hstack((X0, X1))
Y = np.array([
3, 4, 5, 5, 2, 4, 7, 8, 11, 8, 12,
11, 13, 13, 16, 17, 18, 17, 19, 21
]).reshape(m, 1)
alpha = 0.01
import matplotlib.pyplot as plt
plt.scatter(X1,Y,color='red')
plt.show()
3.繪制結果
4.代價函數定義及代價函數的梯度函數
def cost_function(theta, X, Y):
diff = dot(X, theta) - Y # dot()
dot()
return (1/(2*m)) * dot(diff.transpose(), diff)
def gradient_function(theta, X, Y):
diff = dot(X, theta) - Y
return (1/m) * dot(X.transpose(), diff)
梯度下降疊代
# 梯度下降疊代
def gradient_descent(X, Y, alpha):
theta = array([1, 1]).reshape(2, 1)
gradient = gradient_function(theta, X, Y)
while not all(abs(gradient) <= 1e-5):
theta = theta - alpha * gradient
gradient = gradient_function(theta, X, Y)
return theta
optimal = gradient_descent(X, Y, alpha)
print('optimal:', optimal)
print('cost function:', cost_function(optimal, X, Y)[0][0])
5.線性結果繪制
相關代碼
def plot(X, Y, theta):
ax = plt.subplot(111)
ax.scatter(X, Y, s=30, c="red", marker="s")
plt.xlabel("X")
plt.ylabel("Y")
x = arange(0, 21, 0.2)
y = theta[0] + theta[1]*x
ax.plot(x, y)
plt.show()
plot(X1, Y, optimal)
結果
三、參考資料
深入淺出–梯度下降法及其實作
梯度下降算法原理講解——機器學習