博客
关于我
Python 中的机器学习简介:多项式回归
阅读量:795 次
发布时间:2023-03-06

本文共 2560 字,大约阅读时间需要 8 分钟。

多项式回归是机器学习中的一个重要概念,它能够识别自变量与因变量之间的非线性关系。本文是关于回归、梯度下降和MSE的一系列文章中的第三篇。前两篇文章分别介绍了简单线性回归和广义线性回归的基本原理。

二、多项式回归的核心思想

多项式回归是一种特殊的多元线性回归方法,它通过引入自变量的多项式形式来捕捉复杂的非线性关系。与简单线性回归不同,多项式回归允许每个自变量被表示为其他自变量的多项式形式。例如,可以将一个自变量表示为另一个自变量的平方、立方等形式。

通过多项式回归,我们可以构建一个多项式模型来拟合数据。例如,一个三阶多项式模型的形式为:

$$Y = \beta_0 + \beta_1 X_1 + \beta_2 X_1^2 + \beta_3 X_1^3 + \epsilon$$

这里,$X_0$ 是一个偏置列,允许模型包含一个常数项。通过这种形式,我们可以为每个自变量指定一个系数,从而构建一个灵活的模型。

三、数据准备

在实际应用中,我们需要准备训练数据。可以通过随机生成的方式来创建数据集。以下是一个简单的示例:

  • 生成数据

    import torchtorch.manual_seed(5)torch.set_printoptions(precision=2)# 偏置列X0 = torch.ones((1000, 1))# 自变量X1 = (100 * (torch.rand(1000) - 0.5)).reshape(-1, 1)  # 生成-50到50之间的随机数X2 = X1 ** 2X3 = X1 ** 3X = torch.hstack((X0, X1, X2, X3))# 目标值normal = torch.distributions.Normal(loc=0, scale=8)Y = (3 * X[:, 3] + 2 * X[:, 2] + 1 * X[:, 1] + 5 + normal.sample(torch.ones(1000).shape)).reshape(-1, 1)# 数据集划分Xtrain, Xtest = X[:800], X[800:]Ytrain, Ytest = Y[:800], Y[800:]
  • 初始化权重

    torch.manual_seed(5)w = torch.rand(size=(4, 1))
  • 绘制最佳拟合线

    import matplotlib.pyplot as pltdef plot_lbf():    plt.scatter(Xtrain[:, 1], Ytrain, label="train")    plt.scatter(Xtest[:, 1], Ytest, label="test")    # 绘制最佳拟合线    X1_plot = torch.arange(-50, 50.1, 0.1).reshape(-1, 1)    X2_plot, X3_plot = X1_plot ** 2, X1_plot ** 3    X0_plot = torch.ones(X1_plot.shape)    X_plot = torch.hstack((X0_plot, X1_plot, X2_plot, X3_plot))    plt.plot(X1_plot.flatten(), model(w, X_plot).flatten(), color="red", zorder=4)    plt.xlim(-50, 50)    plt.xlabel("$X$")    plt.ylabel("$Y$")    plt.legend()    plt.show()plot_lbf()
  • 四、模型训练

    为了最小化损失函数,我们可以使用梯度下降算法。以下是一个简单的实现:

    lr = 5e-11epochs = 500000def gradient_descent(w):    n = Xtrain.shape[0]    return w - (lr * 2 / n) * (torch.matmul(-Ytrain.T, Xtrain) + torch.matmul(torch.matmul(w.T, Xtrain.T), Xtrain)).reshape(w.shape)for i in range(0, epochs):    w = gradient_descent(w)        if (i + 1) % 100000 == 0:        print("epoch:", i + 1)        print("weights:", w)        print("Train MSE:", MSE(model(w, Xtrain), Ytrain))        print("Test MSE:", MSE(model(w, Xtest), Ytest))        print("=" * 10)        plot_lbf()

    五、正态方程的应用

    正态方程是一种替代优化方法,它通过直接计算权重的最优值来避免梯度下降的慢收敛问题。其公式为:

    $$w = (X^T X)^{-1} X^T Y$$

    这种方法能够在有限的计算资源下快速找到最优解。

    def NormalEquation(X, Y):    return torch.inverse(X.T @ X) @ X.T @ Yw = NormalEquation(Xtrain, Ytrain)

    通过正态方程,我们可以直接计算出最优权重。与梯度下降相比,正态方程能够更快地找到最优解,并且通常具有更低的MSE值。

    六、结论

    通过本文的实现,我们可以看到多项式回归在处理非线性关系方面的强大能力。然而,梯度下降算法在某些情况下可能需要大量的计算资源才能收敛。正态方程提供了一种替代方案,它能够快速地找到最优解,并且通常具有更低的MSE值。

    接下来的两篇文章将分别介绍套索回归和岭回归。这两种方法在机器学习领域引入了重要的概念:过拟合和正则化。通过理解这些方法,我们可以更好地理解机器学习模型的设计和优化。

    转载地址:http://jbofk.baihongyu.com/

    你可能感兴趣的文章
    python | xlwings,一个非常实用的 Excel 相关的 Python 库!
    查看>>
    python | xmltodict,一个非常厉害的 关于XML数据 Python 库!
    查看>>
    python | xonsh,一个超酷的 Python 库!
    查看>>
    python | yagmail,一个实用的 Python 库!
    查看>>
    python | 一文掌握Python的上下文管理器和with语句
    查看>>
    python | 一文看懂Python闭包机制与变量作用域规则
    查看>>
    python读取含中文的json
    查看>>
    python | 如何用Python锁避免并发错误?
    查看>>
    python | 提升代码迭代速度的Python重载方法
    查看>>
    python | 深入理解Python并发编程中的GIL限制与解决方案
    查看>>
    Python | 爬虫实战——亚马逊搜索页监控(附详细源码)
    查看>>
    python | 高效使用Python工具自动生成模块文档的秘诀
    查看>>
    python 一个list去除另一个list中的值
    查看>>
    python 三大框架的 介绍。
    查看>>
    Python 下载的 11 种姿势,一种比一种高级!
    查看>>
    python读取一个文件夹下所有图片_初学Python-找出文件夹下的所有图片
    查看>>
    Python 中 3 个不可思议的返回功能
    查看>>
    python 中 dict 的另一种用法
    查看>>
    Python 中 PIL 读取图片出现异常旋转的解决方法
    查看>>
    python读取word表格内容(1)
    查看>>