有没有数学和算法好的朋友,计算线性回归用啥算法最快? - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
Richard14

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

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

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

    ruxuan1306
        10
    ruxuan1306  
       Nov 12, 2023
    哦不好意思没注意,原来是在对比计算机运行的效率,不是人算出结果的效率
    jc89898
        11
    jc89898  
       Nov 12, 2023
    @dayeye2006199 你这个有很大的问题,一般都是近似法,直接计算 inverse 对大 matrix 根本不行
    t133
        12
    t133  
       Nov 12, 2023 via iPhone
    @jc89898 解线性方程可以用 CG 需要 vector matrix multiplication.
    也可以用 cholesky decomposition
    YsHaNg
        13
    YsHaNg  
       Nov 13, 2023
    svd 有 c 接口用 eigen 直接调用
    dun2
        14
    dun2  
       Nov 13, 2023
    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
        15
    sakura6264  
       Nov 13, 2023
    最小二乘比较快吧。
    真特别追求效率可以把演算挪到 GPU 上
    vvhy
        16
    vvhy  
       Nov 13, 2023
    单变量线性回归,“初中方法”就好了啊,反正都是 O(n),区别不大,用最简单的就行了
    rogerer
        17
    rogerer  
       Nov 14, 2023 via iPhone
    最小二乘法因为涉及到矩阵运算 在高维的时候效率比较低
    About     Help     Advertise     Blog     API     FAQ     Solana     5812 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 1143ms UTC 01:55 PVG 09:55 LAX 18:55 JFK 21:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86