• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Richard14
V2EX  ›  程序员

有没有数学和算法好的朋友,计算线性回归用啥算法最快?

  •  
  •   Richard14 · Nov 12, 2023 · 4512 views
    This topic created in 1087 days ago, the information mentioned may be changed or developed.

    题目要求简单线性回归,也就是给一组二维坐标,比如[0,1],[2,2],[5,4]...等等,然后求出对应在直角坐标系里的回归的直线的斜率和截距即可。

    上网查了查,资料说有啥最小二乘法,牛顿法,梯度下降法等等,说实话公式一个也没看懂。初中数学给的那个线性回归公式倒是看懂了,算起来也挺简单的。从计算效率角度讲,具体算的时候用哪种方法比较快?

    17 replies  •  2023-11-14 10:12:38 +08:00
    billlee
    billlee
    Nov 12, 2023
    1
    你这个一维模型应该是最小二乘法快吧,不过一维模型真的需要考虑效率问题吗?不是随便算都行
    ranaanna
    ranaanna
    Nov 12, 2023
    2
    这么简单的线性回归问题,当然是最小二乘法罗。以前做实验的时候数据少都是手工或者用计算器算的。用电脑算实在是完全不在话下,现在流行机器学习人工智能什么的,海量的线性回归都没有问题,更不要说这么简单的。那些高斯牛顿法梯度下降法什么的是用来求函数最小值问题的,当然就不限于线性问题了,用来处理非线性最小二乘问题比较合适。这么简单的问题就先不要考虑那种方法比较快了
    iorilu
    iorilu
    Nov 12, 2023
    3
    线性回归, 直接调公式就出来啊, 不用迭代

    公式任何一个线性代数库都
    dayeye2006199
    dayeye2006199
    Nov 12, 2023❤️1
    4
    (X^T X)^-1 X^T Y
    矩阵乘法直接撸就行
    LykorisR
    LykorisR
    Nov 12, 2023
    5
    最小二乘法,Ax=b, x=(A^TA)^-1*A^Tb
    iOCZS
    iOCZS
    Nov 12, 2023
    6
    数学计算的话,用最小二乘法就行了。
    写代码的话,梯度下降这种迭代思想容易写成代码。
    gpt5
    gpt5
    Nov 12, 2023❤️1
    7
    一般来说,自己手写的,都不如调包快。
    特别是久经优化和考验的包。
    lithiumii
    lithiumii
    Nov 12, 2023 via Android
    8
    只要结果的话矩阵运算最快,需要各种参数(什么 t 啊 p 啊 f 啊之类的)调包快
    ruxuan1306
    ruxuan1306
    Nov 12, 2023
    9
    Excel-数据分析-回归

    ruxuan1306
    ruxuan1306
    Nov 12, 2023
    10
    哦不好意思没注意,原来是在对比计算机运行的效率,不是人算出结果的效率
    jc89898
    jc89898
    Nov 12, 2023
    11
    @dayeye2006199 你这个有很大的问题,一般都是近似法,直接计算 inverse 对大 matrix 根本不行
    t133
    t133
    Nov 12, 2023 via iPhone
    12
    @jc89898 解线性方程可以用 CG 需要 vector matrix multiplication.
    也可以用 cholesky decomposition
    YsHaNg
    YsHaNg
    Nov 13, 2023
    13
    svd 有 c 接口用 eigen 直接调用
    dun2
    dun2
    Nov 13, 2023
    14
    python 走起..

    ```
    import numpy as np
    from sklearn.linear_model import LinearRegression

    x = np.array([0, 2, 5]).reshape(-1, 1)
    y = np.array([1, 2, 4])

    model = LinearRegression()

    model.fit(x, y)

    print(f"斜率:", model.coef_[0])
    print(f"截距:", model.intercept_)
    ```
    sakura6264
    sakura6264
    Nov 13, 2023
    15
    最小二乘比较快吧。
    真特别追求效率可以把演算挪到 GPU 上
    vvhy
    vvhy
    Nov 13, 2023
    16
    单变量线性回归,“初中方法”就好了啊,反正都是 O(n),区别不大,用最简单的就行了
    rogerer
    rogerer
    Nov 14, 2023 via iPhone
    17
    最小二乘法因为涉及到矩阵运算 在高维的时候效率比较低
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4692 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 05:51 · PVG 13:51 · LAX 21:51 · JFK 00:51
    ♥ Do have faith in what you're doing.