一、问题描述
考虑一元目标函数。
(1)写出目标函数F的。
(2)初始值w=0,请画出梯度下降算法在最小化目标函数F的搜索轨迹。初始值w=2呢?
二、实验目的
学习梯度下降算法。
三、实验内容
1.数据导入:采用自动生成的数据
2.数据预处理:
四、实验结果及分析
(1)w = 0时
(2)w = 2时
五、完整代码
机器学习GitHub:https://github.com/wanglei18/machine_learning
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties #步骤一
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15) #步骤二
def addLine(X):
length = X.shape[0] #矩阵第一维度的长度
num = np.ones((length,1))
for i in range(0, length):
num[i] = i+1 #坐标轴 x
X = np.c_[num, X] #合并坐标轴
return X
def printLine(x_name, y_name, title, X): #x轴,y轴,标题,矩阵
plt.figure(1)
plt.plot(X[:,0], X[:,1], 'bo', ms=3) #蓝色散点
plt.plot(X[:,0], X[:,1], 'b', ms=3, label='line1') #蓝色实线
plt.xlabel(x_name, fontproperties = font) #步骤三
plt.ylabel(y_name, fontproperties = font)
plt.title(title, fontproperties = font)
plt.show()
return 0
N, eta = 20, 0.1
w = 2
y = np.ones((N, 1)) #[[1.] **** [1.]]总共20个
X = np.ones((N, 1))
for t in range(N):
w = w - eta*2*(w-1/2) #每一次迭代
y[t] = w
X[t] = w*w - w + 1 #原函数
y = addLine(y) #一维数组转换成二维数组
X = addLine(X)
print("X = ", X)
print("y = ", y)
print("w = ", w)
printLine('N', 'W', 'W与N的关系图', y)
printLine('N', 'F(W)', 'F(W)函数图', X)