# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as mp X = np.linspace(0, 2, 100) np.random.shuffle(X) Y = 4 * X + 5 + np.random.normal(0, 0.5, (100,)) train_x, train_y = X[1:60:1], Y[1:60:1] test_x, test_y = X[60:], Y[60:] times = 20 # 定义梯度下降次数 lrate = 0.01 # 记录每次梯度下降参数变化率 # 记录每次梯度下降的索引 w0, w1, losses,epoches = [1], [1], [],[] for i in range(1, times + 1): epoches.append(i) loss = ((w0[-1] + w1[-1] * train_x - train_y) ** 2).sum()/2 losses.append(loss) # 求损失函数关于w0与w1的偏导数,从而更新模型参 d0 = (w0[-1] + w1[-1] * train_x - train_y).sum() d1 = (train_x * (w0[-1] + w1[-1] * train_x - train_y)).sum() # 根据梯度下降公式,更新w0与w1 w0.append(w0[-1] - lrate * d0) w1.append(w1[-1] - lrate * d1) # print("w0=%f,w1=%f,loses=%f"%(w0,w1,losses)) #print('line mode : y= %f + %f * x' % (w0, w1)) linex = np.linspace(train_x.min(), train_x.max(), 200) liney = w1[-1] * linex + w0[-1] mp.figure('Linear Regression ', facecolor='lightgray') mp.title('Linear,Regression ', fontsize=18) mp.scatter(train_x,train_y,s=80,marker='o',color='dodgerblue', label='Samples') mp.plot(linex,liney,color="orange") mp.legend() mp.show() mp.figure('Training Progress ', facecolor='lightgray') mp.title('Training Progress ', fontsize=18) mp.grid(linestyle=':') mp.subplot(311) mp.grid(linestyle=':') mp.ylabel(r'$w_0$',fontsize=14) mp.plot(epoches,w0[ :-1],color='dodgerblue',label=r'$w_os') mp.legend() mp.subplot(312) mp.grid(linestyle=':') mp.ylabel(r'$w_1$',fontsize=14) mp.plot(epoches,w1[ :-1],color='blue' ,label=r'$w_1s') mp.legend() mp.subplot(313) mp.grid(linestyle=':') mp.ylabel(r'$loss$', fontsize=14) mp.plot(epoches,losses, color= 'red',label=r'$loss$') mp.legend() mp.show()
时间: 2023-06-14 10:04:06 浏览: 126
这段代码实现了一个简单的线性回归模型,使用梯度下降算法进行参数更新,训练模型拟合一个带有噪声的线性函数。具体实现过程如下:
1. 首先生成100个等间隔的随机数作为输入X,然后将它们随机打乱,生成一个带有噪声的线性函数Y = 4X + 5 + ε,其中ε服从均值为0,标准差为0.5的正态分布。
2. 将前60个样本作为训练集,后40个样本作为测试集。
3. 定义梯度下降的迭代次数为20,学习率为0.01,记录每次梯度下降的参数变化率,以及每次梯度下降的参数值和损失函数值。
4. 在每次迭代中,计算模型在训练集上的损失函数,并根据梯度下降公式更新模型参数(w0和w1)。
5. 记录每次梯度下降的参数值、变化率和损失函数值,并在训练完成后绘制出模型拟合的直线、参数变化率和损失函数随迭代次数的变化图。
需要注意的是,这段代码中的绘图部分使用了matplotlib库,通过subplot函数将三张子图绘制在同一个画布上,分别展示模型参数w0和w1的变化情况,以及损失函数随迭代次数的变化情况。同时,使用scatter和plot函数绘制训练集样本点和模型拟合的直线。
相关问题
#-*- coding:utf-8 -*-import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 10, 1000) y =np.sin(x) z= np.cos(x)k=× plt.subplot(221)#第一行的左图 plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2) plt.subplot(222)#第一行的右图 plt.plot (x,z,"b--", label="$cos (x)$")p1t.subplot(212)#第二整行plt.plot(x,k, "g--",label="$x$") plt.legend() plt.savefig('image.png',dpi=100)#dpi是指保存图像的分辨率,默认值为80plt.show()是否有错
这段代码有两个小错误:
1. 第 4 行的 `y =np.sin(x)` 应该是 `y =np.sin(x)`,即变量名和 `x` 一致。
2. 第 7 行的 `k=×` 应该是 `k=x`,即变量名和 `x` 一致。
另外,第 9 行的 `plt.subplot(221)` 和第 11 行的 `plt.subplot(222)` 中的括号应该是英文括号,而不是中文括号。
修改后的正确代码如下:
```
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x)
k = x
plt.subplot(221) # 第一行的左图
plt.plot(x, y, label="$sin(x)$", color="red", linewidth=2)
plt.subplot(222) # 第一行的右图
plt.plot(x, z, "b--", label="$cos(x)$")
plt.subplot(212) # 第二整行
plt.plot(x, k, "g--", label="$x$")
plt.legend()
plt.savefig('image.png', dpi=100) # dpi是指保存图像的分辨率,默认值为80
plt.show()
```
注意,代码中的第 9 行和第 11 行可以改为:
```
plt.subplot(2, 2, 1) # 第一行的左图
plt.subplot(2, 2, 2) # 第一行的右图
```
这样更符合 subplot 函数的使用方法,而且避免了括号的问题。
# -*- coding: utf-8 -*- """ Created on Tue Apr 4 23:30:19 2023 @author: Json """ import matplotlib.pyplot as plt import numpy as np from matplotlib.animation import FuncAnimation fig = plt.figure() ax = fig.add_subplot(1, 1, 1) x = np.linspace(0, 2 * np.pi, 5000) y = np.exp(-x) * np.cos(2 * np.pi * x) line,= ax.plot(x, y, color="cornflowerblue", lw=3) ax.set_ylim(-1.1, 1.1) # # 清空当前帧 # def init(): # line.set_ydata([np.nan] * len(x)) # return line, #,init_func=init # 更新新一帧的数据 def update(frame): line.set_ydata(np.exp(-x) * np.cos(2 * np.pi * x + float(frame)/100)) return line, # 调用 FuncAnimation ani = FuncAnimation(fig ,update ,frames=200 ,interval=2 ,blit=True ) ani.save("animation.gif", fps=25, writer="imagemagick")
这段代码是一个 Python 的动画代码,使用了 Matplotlib 库进行绘图和动画展示。它定义了一个函数 init(),用于清空当前帧的数据。然后定义了一个 update() 函数,用于更新新一帧的数据。最后使用 Matplotlib 的 FuncAnimation() 函数创建了一个动画对象 ani,并保存为 GIF 格式的动画文件。
阅读全文
相关推荐

















