线性回归中误差函数的3D图

麦可

我想在视觉上绘制针对给定斜率和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图的基本代码。该代码段完全不在问题上下文中,但它显示了构建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()

上面的代码产生以下图,这与我要查找的图非常相似。 这是上面的代码产生的

算了吧

只需替换funcomputeErrorForLineGivenPoints

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import collections

def error(m, b, 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))

x = y = np.arange(-3.0, 3.0, 0.05)
Point = collections.namedtuple('Point', ['x', 'y'])

m, b = 3, 2
noise = np.random.random(x.size)
points = [Point(xp, m*xp+b+err) for xp,err in zip(x, noise)]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ms = np.linspace(2.0, 4.0, 10)
bs = np.linspace(1.5, 2.5, 10)

M, B = np.meshgrid(ms, bs)
zs = np.array([error(mp, bp, points) 
               for mp, bp in zip(np.ravel(M), np.ravel(B))])
Z = zs.reshape(M.shape)

ax.plot_surface(M, B, Z, rstride=1, cstride=1, color='b', alpha=0.5)

ax.set_xlabel('m')
ax.set_ylabel('b')
ax.set_zlabel('error')

plt.show()

产量 在此处输入图片说明

提示:我改名computeErrorForLineGivenPointserror通常,compute...由于几乎所有函数都会计算某些内容,因此无需命名函数您也不需要指定“ GivenPoints”,因为函数签名显示这points是一个参数。如果程序中还有其他错误函数或变量,line_error或者total_error可能是该函数的更好名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正弦图的线性回归函数

来自分类Dev

在多元线性回归中绘制残差图

来自分类Dev

线性回归中的负系数

来自分类Dev

绘制由sklearn制成的回归器的3d图

来自分类Dev

Logistic回归中的错误图

来自分类Dev

提取线性回归中的离群指标

来自分类Dev

线性回归中的梯度下降出错

来自分类Dev

多元线性回归中的特征选择

来自分类Dev

线性回归中的梯度下降出现错误

来自分类Dev

在线性回归中处理 NaN——scipy?

来自分类Dev

在Matplotlib中将误差线添加到3D图

来自分类Dev

在Gnuplot中生成带有误差线的3D图

来自分类Dev

R-线性回归中的回归系数和绝对

来自分类Dev

D3.js线性回归

来自分类Dev

numpy中的线性回归斜率误差

来自分类Dev

标准差/线性回归误差

来自分类Dev

缺少数据的误差线性回归

来自分类Dev

标准偏差/线性回归误差

来自分类Dev

Xmgrace:使用误差线进行线性回归

来自分类Dev

线性回归图真的不好

来自分类Dev

R 中没有点的回归平面的 3D 图

来自分类Dev

根据两个变量绘制3D误差函数

来自分类Dev

Python 中使用 matplotlib 的线性模型的 3d 曲面图

来自分类Dev

mathcad / matlab传递函数的3D图

来自分类Dev

Matlab 3D传递函数幅度图

来自分类Dev

带函数调用的3d表面图

来自分类Dev

具有3d numpys作为输入和线性回归(一个输出)的神经网络

来自分类Dev

为什么在线性回归中使用梯度下降?

来自分类Dev

为什么在线性回归中使用梯度下降?