西西河

主题:算法求教 -- 我不知道

共:💬22 新:
分页树展主题 · 全看 下页
  • 家园 算法求教

    俺这个是数学问题,当年学的大部分都还给老师了,河里大牛多,偷个懒这里问问看。问题如下

    由一组随时间产生的数据,比如

    1:00pm 35

    2:00pm 40

    3:00pm 20

    4:00pm 15

    ....

    希望能计算出其中的线性关系,同时推算这组数据线性关系的相关度。

    我隐隐约约记得一个名词好像是线性最小二乘法能干这个,哪未能指点一下。

    另,我先google过了,但一看那些高数的符号就头晕,所以指点的时候麻烦说简单些。谢!

    • 家园 【原创】你既然已把数据导入sql,那最小二乘法就太容易了

      比如你有两个变量x和y,共有m对这样的数据,要建立的方程是 y=a+bx

      需要获得a和b的估计值,以及一个相关系数r。

      那么,根据最小二乘法,

      b = [∑Xi Yi - (∑Xi ∑Yi)/ m] / [∑Xi^2 - (∑Xi)^2 / m)]

      a = ∑Yi / m - b ∑Xi / m

      r = [∑XiYi - m (∑Xi / m)(∑Yi / m)]/ SQR{[∑Xi^2 - m (∑Xi / m)^2][∑Yi^2 - m (∑Yi / m)^2]}

      用sql计算公式中的几个部件,比用其他语言方便多了:

      ∑Xi就是select sum(x)

      ∑Yi就是select sum(y)

      (∑Xi)^2就是 select sum(x*x)

      (∑Yi)^2就是 select sum(y*y)

      ∑XiYi就是 select sum(x*y)

      m就是select count(*)

      你甚至可以在一个select 语句中就把所有的东西算完了。

      关键词(Tags): #sql#最小二乘法
      • 家园 谢拉。

        除了r都搞定了。我用的公式和你的一样。不知道为什么算出来的和这个网站的不一样。

        http://www.shodor.org/unchem/math/lls/leastsq.html

        • 家园 我觉得最好用少量数据在Excel验证算每个部件的值

          这个网站,没有输出中间过程,所以你不知道你的命令哪里出了问题。

          你可以把相同的少量数据同时输入到sql和Excel中,在Excel中可以很容易地算出每个部件(累加和)的值。可以用来与你sql中算出了量部件值进行比较,看到底哪那个地方有毛病。如果找一本用中间结果的教科书,也很容易比较出来。

    • 家园 Exel就可以了

      先做个线性图然后做个线性Trendline。在trendline里,有个选项是show trendline equation.选了后,就可以看到了。

    • 家园 minitab 和 mathcad 都可用。

      好处是,教学帮助功能很强。

      即使某些东西时间长忘记了,也能帮你复习起来。

    • 家园 比较常用的,是SPSS

      到处都可以早得到,版本老点也无所谓,线性是最简单的,肯定支持。

    • 家园 看你用什么软件

      但是几乎每个软件都有线性回归包或函数。狗之可也。

    • 家园 很少会做30000个数据的线性回归啊

      这么大的数组还求线性关系很少见。你简单的抽100个出来应该就能拟合到很好的结果了(当然前提这些数据确实是线性关系的的,你要是拿个非线性关系的的来做线性拟合另说)

      y=a0+a1X

      公式就是:

      a0 = (∑Yi) / m - a1(∑Xi) / m

      a1 = [∑Xi Yi - (∑Xi ∑Yi)/ m] / [∑Xi2 - (∑Xi)2 / m)]

      线性相关度R是

       R = [∑XiYi - m (∑Xi / m)(∑Yi / m)]/ SQR{[∑Xi2 - m (∑Xi / m)2][∑Yi2 - m (∑Yi / m)2]}

      非常简单,计算规模和数据量也是线性相关的,随便找任何一种语言,c,fortran,matlab,origin应该都能做出来。如果excel能计算30000个数的加法也可能用来求那几个∑,总共就三个∑Xi,∑Yi,∑Xi Yi 然后手动带到计算器里面算就好了。

      • 家园 线性相关度的公式还在研究中

        30000个数据不是一个数组,是n个数组,对应n种情况。每种情况大概也就100多不到200的数据点。

        • 家园 先做模型

          把有效数据的各种因素明确,不要为了回归而回归,一点要有模型。即回归出来的系数要有明确的量纲或明确的应用意义。

          对n种情况做n次回归分析。然后把n个(组)系数取平均。可以加权,是n次权重是否一样而定。

    • 家园 要做一下线性回归。

      百度找到的。Excel里做线性回归。不知道能不能做到30000个数据。你自己试吧。Excel我也不是专家。

      用MATLAB的话,有一个polyfit函数。

      点击插入里面的散点图,里面有一个圆滑的带点的图,点击那个以后会弹出一个空白图,单击右键后点选择数据,然后x,y分别选定,图就做出来了。之后点击图上的点,选定所有点后右击,有一个拟合,选择线性,并在方程那一栏打钩

分页树展主题 · 全看 下页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河