【发布时间】:2015-04-17 00:55:06
【问题描述】:
我想直观地绘制为给定斜率和 y 截距计算的线性回归的误差函数的 3D 图。 此图将用于说明梯度下降应用程序。
假设我们想用一条线对一组点进行建模。为此,我们将使用标准的 y=mx+b 直线方程,其中 m 是直线的斜率,b 是直线的 y 轴截距。为了找到最适合我们数据的直线,我们需要找到斜率 m 和 y 截距 b 值的最佳集合。
解决此类问题的标准方法是定义一个误差函数(也称为成本函数)来衡量给定线的“好”程度。此函数将采用 (m,b) 对并根据线与数据的拟合程度返回错误值。为了计算给定线的这个误差,我们将遍历数据集中的每个 (x,y) 点,并将每个点的 y 值与候选线的 y 值之间的平方距离求和(在 mx+b 处计算)。按照惯例,对这个距离进行平方以确保它是正数并使我们的误差函数可微。在 python 中,计算给定行的错误如下所示:
# y = mx + b
# m is slope, b is y-intercept
def computeErrorForLineGivenPoints(b, m, points):
totalError = 0
for i in range(0, len(points)):
totalError += (points[i].y - (m * points[i].x + b)) ** 2
return totalError / float(len(points))
由于误差函数由两个参数(m 和 b)组成,我们可以将其可视化为二维表面。
现在我的问题是,我们如何使用 python 绘制这样的 3D 图?
这是构建 3D 绘图的骨架代码。这段代码 sn-p 完全不在问题范围内,但它显示了构建 3D 绘图的基础知识。 对于我的示例,我需要 x 轴为斜率,y 轴为 y 截距,z 轴为误差。
有人可以帮我建立这样的图表示例吗?
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import random
def fun(x, y):
return x**2 + y
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(-3.0, 3.0, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array([fun(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
ax.plot_surface(X, Y, Z)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
上面的代码产生了下面的情节,这与我正在寻找的非常相似。
【问题讨论】:
-
@csgillespie 不,我删除了 R 标签,我没有注意到它被添加了;谢谢
标签: python matplotlib pandas plot machine-learning