python - 如何使用 matplotlib 在 x 轴上绘制循环变量 i,在 y 轴上绘制循环中的局部变量
问题描述
我正在使用 numpy 在线性回归上练习梯度下降。这是我的梯度下降过程:
def batch_gradient_descent(data_points, initial_b, initial_W, lr, iterations):
b = initial_b
W = initial_W
for i in range(iterations): # Calcultes Gradient Descent for n-iterations.
b, W = gradient_step(b, W, data_points, lr)
current_cost = cost(b, W, data_points)
# plt.figure(figsize=(8, 4))
# plt.plot(i, current_cost, linewidth=1)
# plt.xlabel("iteration")
# plt.ylabel("log(L)")
# plt.title("log(L) After "+str(i)+"th iteration")
plt.show()
return [b, W]
我需要使用 matplotlib 总共只绘制两个数字:
x 轴是 i,y 轴是根据每个 i 的 log(cost) 值。
x轴是i,y轴是W中每个元素的值的曲线,是一个5*1的向量。因此,该图中将有 5 行。
顺便说一下,总迭代次数是 200,这意味着 x 轴上的取值范围应该是 0 - 200。
我的原始解决方案在代码中进行了注释,但它实际绘制的是许多数字,看起来像:
这样做的正确方法是什么?
解决方案
您可以将它们附加到您的x
和y
-axis的列表中
x = []
y = []
def batch_gradient_descent(data_points, initial_b, initial_W, lr, iterations):
b = initial_b
W = initial_W
for i in range(iterations): # Calcultes Gradient Descent for n-iterations.
b, W = gradient_step(b, W, data_points, lr)
current_cost = cost(b, W, data_points)
x.append(i)
y.append(current_cost)
return [b, W]
然后像这样绘制它:
plt.figure(figsize=(8, 4))
plt.plot(x, y, linewidth=1)
plt.xlabel("iteration")
plt.ylabel("log(L)")
plt.title("log(L) After " + str(x[-1]) + "th iteration")
plt.show()
推荐阅读
- reactjs - 重置redux-form时react-select不清除值
- android - sqlite数据库中的图像索引
- php - Laravel 方法 Illuminate\Mail\Mailer::test 不存在
- c++ - 对类型的非 const 左值引用 - 使用 Class 类型的参数时,Objective-C++ 包装器中的错误
- android - FB 在某些设备中不返回电子邮件(android chrome 组合)
- objective-c - 如何从字符串中获取电话号码?
- python - 使用 docker 时无法打开共享对象文件
- unix - 除了我在输出中提到的 evar 之外,我如何删除所有目录
- json - Swift 4 JSONEncoder 中的字典键顺序
- qt - MacOS 上的 QThread::msleep 睡眠错误时间