帮助写一个线性回归 - 页 6 1234567 新评论 Sceptic Philozoff 2008.07.30 12:14 #51 在这种情况下,最好的办法可能是找到所有X[i]的算术平均值,从数值本身中减去它,计算回归系数,再把它们校正回来。原则上,没有什么能阻止你对Y[i]做同样的事。但我还没有试图找到这个公式,尽管它显然不难。显然,弱条件矩阵有一些技巧。 P.S. 你也可以将数据系列归一化到差不多的顺序。 Prival 2008.07.30 12:58 #52 Mathemat писал (а)>> 在这种情况下,最好的办法可能是找到所有X[i]的算术平均值,从数值本身中减去它,计算回归系数,再把它们校正回来。原则上,没有什么能阻止你对Y[i]做同样的事。但我还没有试图找到这个公式,尽管它显然不难。显然,弱条件矩阵有一些技巧。 P.S. 你也可以将数据系列归一化到差不多的顺序。 而我有,并通过司法部建议。直接的公式,不需要校正。 现在你也可以把ACF放在代码库中。重新检查后,都与8个字符的精度相吻合,但这很可能是由于在MQL中计算的ACF的文件值的输入。 Yurixx 2008.07.30 14:09 #53 谢尔盖,几年前我在写LR的时候已经偶然发现了这个问题。出路很简单--听从Candid 的建议。我在这个建议中唯一要说明的是,不是减去Time[Bars-1],而是减去第一个值X[]的时间。首先,它使程序代码具有通用性,因为X开头被移到了程序内。其次,如果图表上有很多条形图(3年是1000000分钟,即60000000秒),那么减去图表上第一个条形图的时间并不会从根本上改变情况。第三,你将能够在没有任何MO的情况下回到你的原始公式,这意味着你将能够在保持准确性的同时消除循环重复。 还有一件事。我注意到,你的X[]是分钟的时间。也就是说,X的排列是等距的。这意味着你可以完全摆脱时间的束缚,使用条形号码。如果你实现了这一转变,一切都将被准确而迅速地计算出来。你可以查看。从你的LR在M1和D1上工作相同的角度来看,这也是比较好的(想象一下,如果是时间而不是条数,D1上的X值会有多大差别)。 Prival 2008.07.30 14:41 #54 Yurixx писал (а)>> 谢尔盖... 谢谢,都试过了。 我只是列出了我的计算版本,也许有人会发现它很有用。我不需要移动任何东西。我觉得把X移到0不太合适。我使用这个函数来计算ACF,它应该是有时间限制的(有一些依赖性)。 Yurixx 2008.07.30 15:44 #55 一般来说,没有必要将X本身移动到0点。要做到这一点,只需在LR函数中使用一个由X[1]移位的内部数组,而不是X本身。你甚至可以不使用数组--只要在计算和的时候减去X[1]的值就可以了。 顺便说一下,如果你试过,它没有帮助吗? Prival 2008.07.30 16:05 #56 Yurixx писал (а)>> 一般来说,没有必要将X本身移动到0点。要做到这一点,只需在LR函数中使用一个由X[1]移位的内部数组,而不是X本身。你甚至可以不使用数组--只要在计算和的时候减去X[1]的值就可以了。 顺便说一下,如果你试过了,它有用吗? 我试了一下,似乎很有效。但是有一个细微的差别。 如果算法对一个6个数字的数组给出这样的错误,我们不能保证即使有偏移量,错误也不会累积。我所使用的阵列是7200(分钟)。这就是为什么我发现了这种算法,而且它能正确地工作。我不得不放弃那个,因为我不再信任它了。 //+------------------------------------------------------------------+ //| Формула предлагаемая мной | //| Рассчет коэффициентов A и B в уравнении | //| y(x)=A*x+B | //| используються формулы https://forum.mql4.com/ru/10780/page5 | //+------------------------------------------------------------------+ void LinearRegr(double X[], double Y[], int N, double& A, double& B) { double mo_X = 0.0, mo_Y = 0.0, var_0 = 0.0, var_1 = 0.0; for ( int i = 0; i < N; i ++ ) { mo_X +=X[i]; mo_Y +=Y[i]; } mo_X /=N; mo_Y /=N; for ( i = 0; i < N; i ++ ) { var_0 +=(X[i]-mo_X)*(Y[i]-mo_Y); var_1 +=(X[i]-mo_X)*(X[i]-mo_X); } A = var_0 / var_1; B = mo_Y - A * mo_X; } >> 我不需要任何轮班。 Yurixx 2008.07.30 16:42 #57 没问题,谢尔盖,你喜欢什么就用什么。我只想提请你们注意一个小细节。 你当然明白,MO是在任何一行的最大和最小之间。你的代码实际上是指将原点移动到[mo_X, mo_Y]。要做到这一点,你要循环浏览你所有的7200个值。然后你在计算和的时候,从行坐标中减去零点坐标。你不妨把系列中的任何 一点[Xm, Ym]作为原点,进行第二个周期的计算,用[Xm, Ym]代替[mo_X, mo_Y]。 线性回归的 参数A相对于原点转移是不变的。MO与此毫无关系。 你可以在纸上用3分钟检查这个事实。 这就是为什么计算IR的循环是不必要的。我们只需要把X和Y的值带到平仓单。 Candid 2008.07.30 16:51 #58 Prival писал (а)>> 如果算法对一个6个数字的数组给出了这样的错误,那么即使有了偏移,也不能保证错误不会累积。 这里的问题不是数字的数量,而是在这6个数字中的每一个都坐着一个永久的(无用的)加法1216600000的事实。它根本不包含任何信息。但它是10位有效数字。让它成为9,最后一个0是没有意义的,因为所有的6个也都存在。 当进行平方时,这些垃圾将阻断尾数的17位有效数字。而且里面只有15个。也就是说,它将倾倒最低位数(倒在马桶里)。同时,正是这些被丢弃的数字包含了必要的信息(它们包含了关于变量成分X的部分信息)。 Prival 2008.07.30 17:05 #59 所以这个公式不是我编出来的。这是在书中。从这个使用方块的公式中,可以得出这个公式(没有方块)。只需拿着铅笔坐着。当我到了扫描仪前,我将张贴Tikhonov V.I. "统计无线电工程 "第446页的一页。 Yurixx 2008.07.30 17:23 #60 没错,只要拿着笔坐着,你就会发现,如果你把斜率b的原始公式中的Xi->Xi-X0和Yi->Yi-Y0替换掉,那么这个新公式就等同于原始公式。对于X0和Y0的任何数值。因此,Xi和Yi的和(也就是MO的计算)可以被移到第二个周期内,这就使LR的计算时间减半。为了获得准确性,我们应该选择适当的X0和Y0。而且最好能做到让X系列和Y系列的订单相互接近。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在这种情况下,最好的办法可能是找到所有X[i]的算术平均值,从数值本身中减去它,计算回归系数,再把它们校正回来。原则上,没有什么能阻止你对Y[i]做同样的事。但我还没有试图找到这个公式,尽管它显然不难。显然,弱条件矩阵有一些技巧。
P.S. 你也可以将数据系列归一化到差不多的顺序。
在这种情况下,最好的办法可能是找到所有X[i]的算术平均值,从数值本身中减去它,计算回归系数,再把它们校正回来。原则上,没有什么能阻止你对Y[i]做同样的事。但我还没有试图找到这个公式,尽管它显然不难。显然,弱条件矩阵有一些技巧。
P.S. 你也可以将数据系列归一化到差不多的顺序。
而我有,并通过司法部建议。直接的公式,不需要校正。
现在你也可以把ACF放在代码库中。重新检查后,都与8个字符的精度相吻合,但这很可能是由于在MQL中计算的ACF的文件值的输入。
谢尔盖,几年前我在写LR的时候已经偶然发现了这个问题。出路很简单--听从Candid 的建议。我在这个建议中唯一要说明的是,不是减去Time[Bars-1],而是减去第一个值X[]的时间。首先,它使程序代码具有通用性,因为X开头被移到了程序内。其次,如果图表上有很多条形图(3年是1000000分钟,即60000000秒),那么减去图表上第一个条形图的时间并不会从根本上改变情况。第三,你将能够在没有任何MO的情况下回到你的原始公式,这意味着你将能够在保持准确性的同时消除循环重复。
还有一件事。我注意到,你的X[]是分钟的时间。也就是说,X的排列是等距的。这意味着你可以完全摆脱时间的束缚,使用条形号码。如果你实现了这一转变,一切都将被准确而迅速地计算出来。你可以查看。从你的LR在M1和D1上工作相同的角度来看,这也是比较好的(想象一下,如果是时间而不是条数,D1上的X值会有多大差别)。
谢尔盖...
谢谢,都试过了。
我只是列出了我的计算版本,也许有人会发现它很有用。我不需要移动任何东西。我觉得把X移到0不太合适。我使用这个函数来计算ACF,它应该是有时间限制的(有一些依赖性)。
一般来说,没有必要将X本身移动到0点。要做到这一点,只需在LR函数中使用一个由X[1]移位的内部数组,而不是X本身。你甚至可以不使用数组--只要在计算和的时候减去X[1]的值就可以了。
顺便说一下,如果你试过,它没有帮助吗?
一般来说,没有必要将X本身移动到0点。要做到这一点,只需在LR函数中使用一个由X[1]移位的内部数组,而不是X本身。你甚至可以不使用数组--只要在计算和的时候减去X[1]的值就可以了。
顺便说一下,如果你试过了,它有用吗?
我试了一下,似乎很有效。但是有一个细微的差别。 如果算法对一个6个数字的数组给出这样的错误,我们不能保证即使有偏移量,错误也不会累积。我所使用的阵列是7200(分钟)。这就是为什么我发现了这种算法,而且它能正确地工作。我不得不放弃那个,因为我不再信任它了。
>> 我不需要任何轮班。
没问题,谢尔盖,你喜欢什么就用什么。我只想提请你们注意一个小细节。
你当然明白,MO是在任何一行的最大和最小之间。你的代码实际上是指将原点移动到[mo_X, mo_Y]。要做到这一点,你要循环浏览你所有的7200个值。然后你在计算和的时候,从行坐标中减去零点坐标。你不妨把系列中的任何 一点[Xm, Ym]作为原点,进行第二个周期的计算,用[Xm, Ym]代替[mo_X, mo_Y]。
线性回归的 参数A相对于原点转移是不变的。MO与此毫无关系。
你可以在纸上用3分钟检查这个事实。
这就是为什么计算IR的循环是不必要的。我们只需要把X和Y的值带到平仓单。
如果算法对一个6个数字的数组给出了这样的错误,那么即使有了偏移,也不能保证错误不会累积。
这里的问题不是数字的数量,而是在这6个数字中的每一个都坐着一个永久的(无用的)加法1216600000的事实。它根本不包含任何信息。但它是10位有效数字。让它成为9,最后一个0是没有意义的,因为所有的6个也都存在。 当进行平方时,这些垃圾将阻断尾数的17位有效数字。而且里面只有15个。也就是说,它将倾倒最低位数(倒在马桶里)。同时,正是这些被丢弃的数字包含了必要的信息(它们包含了关于变量成分X的部分信息)。
所以这个公式不是我编出来的。这是在书中。从这个使用方块的公式中,可以得出这个公式(没有方块)。只需拿着铅笔坐着。当我到了扫描仪前,我将张贴Tikhonov V.I. "统计无线电工程 "第446页的一页。