交易中的机器学习:理论、模型、实践和算法交易 - 页 211

 
雷纳特-法特库林

1)不幸的是,你的问题措辞不完整,得到的是未经审视的、简短礼貌的 "无所谓 "的回答。

你想要一个 "如此同意/约定 "的答案,在问题本身中提出。但邓肯第一次逃脱了 "正确的事情",第二次又重蹈覆辙。

2)你在R中没有得到准确性的确认,也没有得到答案,为什么在其他软件包中的结果是不同的。解析 "为什么其他软件包的答案不一样 "这个问题更重要,能够揭示出这个话题。


3)我们的立场。

выражение для dgamma

(x)= 1/(s^a Gamma(a)) x^(a-1) e^-(x/s)

for x ≥ 0, a > 0 and s > 0


в точке 0 является неопределенным.

R认为你可以在计算中包括这个点,但要取极限值,即使它们是无穷大,就像dgamma(0,0.5,1)的情况一样。

然而,如果在零点计算给定的概率,所有来自dgamma的积分正式成为无限,根据这个逻辑,pgamma对于所有x的值都应该等于无限。

然而,这与pgamma的结果相矛盾,所有的值都是有限的。他们是正确的,因为如果在x=0点,密度被假设为=0。

1)是的,我没有得到一个详细的答案。虽然我总结了一下...我不是在强加我的意见,说实话,我也厌倦了争论。我要提请你们注意,这个人的话几乎是逐字逐句地写在我们的原始信息上。如何确定极端点的密度并不重要,主要是要正确计算积分。

我们宣布,严格来说,伽马分布在零点的密度是不确定的。而从右边的极限来看,密度等于1。

有鉴于此,我们认为 "R的计算错误 "的说法并不正确。更确切地说,这是一个约定俗成的问题:比考虑等于零度的表达。在零点将伽马分布密度等同于零,似乎并不是任何有条件的做法。

2)我方面甚至没有谈及准确性。零点的密度与精度无关,而是你如何推导出它作为函数的结果--非收敛性(NaN)或将它等同于极限或零。主要的一点是,这对计算积分并不重要。

3)我重读了文章的更正文本。我很高兴你决定不把dgamma的行为看作是一个错误。

但这个......。

所有来自dgamma的积分正式成为无限,根据这个逻辑,pgamma对于所有x的值都应该等于无限。

Strange, Renat.

pgamma原则上不可能是无限的,因为ingegral从上面被一个1的值所限定。

以正态分布为例。它被定义在[-inf,+inf]上。在这个区间内,分布函数的积分=1。但不知何故,事实证明,在无限大的萨波特上对密度进行求和(积分)并不会产生无限的和。虽然在任何区域,整个基点上的密度!=0。

对于dgmamma来说,点x==0,其密度==inf(顺便说一下,你没有考虑在这一点上密度趋于1的情况,以及你从中得出的关于积分的结论......),它多久出现一次?我想说的是,它并没有。在任何连续分布中,任意一点实现随机变量的概率==0。所有统计学家都知道这一点。密度被认为是对x周围无限小区域的概率的近似。

从这个事实可以看出,无论极端点的密度有多大,它对总积分的影响=0。想一想吧...

我认为你想多了。)但我不会去争论和想办法。也许有一天我会意识到这一点,并代替邓肯自己来回答它。)

谢谢你。

 

R是一个令人惊奇的系统,它使我亲眼看到我们在MetaTrader/MQL中离 "使复杂的计算变得简单和正确 "的真正需求有多远。

我们(C++开发者)的血液中流淌着 "你可以自己做所有的事情,我们给你低级别的基础和计算速度 "的方法。我们对性能非常狂热,而且我们很擅长 - MQL5在64位上非常出色。

当我自己开始研究R时,我意识到我需要在一行中尽可能多的强大功能,并且能够做一般的研究。

因此,我们采取了一个急转弯,开始升级MetaTrader 5。

  • 将之前重写的数学库Alglib和Fuzzy纳入标准交付,并包含单元测试。
  • 从R中开发了一个类似的统计函数,运行测试,并用测试来覆盖它们。工作仍在进行中,库正在扩大
  • 开发了Graphics库的第一个测试版,作为R语言中plot的类似物,增加了快速输出的单行函数
  • 开始改变终端输出窗口的界面,以便能够处理表格数据,改变了输出方向,增加了关闭不必要的栏目,在专家顾问输出窗口中把字体改为单行本。
  • 增加了一个强大的ArrayPrint 功能,用于自动打印数组,包括结构。
  • 增加了FileLoadFileSave 函数,用于快速保存/读取磁盘上的数组。


当然,我们正处于道路的起点,但正确的努力方向已经很清楚。

 

整合的7个步骤当然是不够的。这里有1,000个。

> pgamma(0.8, 0.5, 1)
[1] 0.7940968

#а теперь велосипедное интегрирование:
> integration_steps <- seq(0, 0.8, length.out=1001)
> integration_result <- 0
> for(i in 2:length(integration_steps)){
+ integration_result <- integration_result + dgamma(integration_steps[i], 0.5, 1) * (integration_steps[i] - integration_steps[i-1])
+ }
> integration_result
[1] 0.7709089
#погрешность ~0.02, но тут способ уже проще некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.
 
阿列克谢-伯纳科夫

1)是的,我没有得到一个详细的答案。虽然我在总结...我不是在强加我的意见,说实话,我也厌倦了争论。我要提请你们注意,这个人的话几乎是逐字逐句地写在我们的原始信息上。

这是一个礼貌的回应,没有细节或验证。而且答案与Wolfram Alpha和Matlab并不一致,这是个问题。

没有必要回避--根本问题已经清楚地说明了。

 
Dr.Trader:


#погрешность ~0.02, но тут способ уже велосипедней некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.

对函数1/x进行积分,从0到1,包括边界点,并与分析计算的结果进行比较。

Wolfram说,由于x=0处的奇点,积分将不会收敛。

 
量子化

对函数1/x进行积分,从0到1,包括边界点,并与分析计算的结果进行比较。

用同样的代码--7.485471。R到了76.3342,说不会再往前走了,这不是一个准确的结果,也是不正确的。 Wolfram干脆直接说,结果不加,什么也不回答。
正确答案我不知道,多少钱?

不要告诉我,既然1/x的积分找不到,dgamma(x)的积分也找不到。这两个函数在x->0+时趋向于无穷大,但它们趋向的速度不同,而这种速度影响到是否能找到积分。

 

有一个函数 -log(x)。它在x->0时趋向于无穷大。你可以不做减法,那么它就会向下趋向,我对这一点不放心。

而且它有一个从0到1的积分,无限大不干扰。


 
雷纳特-法特库林

R是一个惊人的系统,它让我亲眼看到我们在MetaTrader/MQL中离 "现在简单明了地进行复杂计算 "的真正需要有多远。

...

因此,我们急转直下,开始升级MetaTrader 5。

  • 包括之前重写的Alglib和Fuzzy数学库作为标准,涵盖了单元测试
  • 从R中开发了一个类似的统计函数,运行测试并用测试覆盖它们。工作仍在进行中,库也在扩大
  • 开发了Graphics库的第一个测试版,作为R语言中plot的类似物,增加了快速输出的单行函数
  • 开始改变终端输出窗口的界面,以便能够对表格数据进行操作。改变了输出方向,增加了禁用不必要的列,在专家顾问输出窗口中用单行体取代了字体。
  • 增加了一个强大的ArrayPrint 功能,用于自动打印数组,包括结构。
  • 增加了FileLoadFileSave 函数,用于快速加载/卸载磁盘上的数组。


当然,我们正处于旅程的起点,但正确的努力方向已经很清楚。

R以及其他许多编程语言,与MQL相比,在机器学习方面要方便得多,因为它有一个内置的数组数据处理功能集。问题是,机器学习的样本通常是一个二维数据数组,所以它需要一个处理数组的功能。

  1. 将行和列作为小尺寸的数组插入另一个数组中
  2. 将数组中的行和列替换成更小的数组
  3. 从数组中删除行和列(例如,从选择中删除不重要的预测因子或有明显 "异常值 "的例子)。
  4. 将数组分成若干部分,从而产生两个或更多的数组,这些数组是原始数组的一部分(需要将一个样本分成训练和测试部分,或分成更多的部分,例如用于Walling Forward)。
  5. 随机洗刷数组中的行和列,并进行平均分配(有必要让样本中的某些样本进入不同的部分,最好是均匀地分布在这些部分)。
  6. 用于每行或每列数据处理的各种功能(例如,计算每行或每列的算术平均值、方差,或为进一步规范化寻找某行的最大或最小值)。
  7. 诸如此类,不一而足。

在MQL实现上述处理数组中的样本所需的功能之前,大多数机器学习算法的开发者会更喜欢其他已经有这些功能的编程语言。或者他们会使用AlgLib库中朴实无华的MLP(1960年代的算法),如果我没记错的话,为了方便,二维数组被表示成一维的。

当然,随机分布的密度的函数也是一个必要的功能。但在机器学习任务中并不总是需要这样的函数,在一些任务中根本就不使用。但是对样本的操作,就像对多维数组的操作一样,是机器学习算法的实现在任何任务中都离不开的,当然除非是训练一个网格,从琐碎的CWR中学习已知的归一化数据的任务。

 
雷纳特-法特库林

R是一个惊人的系统,它让我看到了我们在MetaTrader/MQL中离 "让复杂的计算变得简单和正确 "的真正需求有多远。

我们(C++开发者)的血液中流淌着 "你可以自己做所有的事情,我们给你低级别的基础和计算速度 "的方法。我们对性能非常狂热,而且我们很擅长 - MQL5在64位上非常出色。

当我自己开始研究R时,我意识到我需要在一行中尽可能多的强大功能,并且能够做一般的研究。

因此,我们采取了一个急转弯,开始升级MetaTrader 5。

  • 将之前重写的数学库Alglib和Fuzzy纳入标准交付,并包含单元测试。
  • 从R中开发了一个类似的统计函数,运行测试并用测试覆盖它们。工作仍在进行中,库也在扩大
  • 开发了Graphics库的第一个测试版,作为R语言中plot的类似物,增加了快速输出的单行函数
  • 我们开始改变终端输出窗口的界面,以便能够对表格数据进行操作。 我们改变了输出的方向,增加了禁用不必要的列,将专家顾问输出窗口的字体改为单行体
  • 增加了一个强大的ArrayPrint 功能,用于自动打印数组,包括结构。
  • 增加了FileLoadFileSave,以快速将阵列写入/读取到磁盘。


当然,我们正处于道路的起点,但正确的努力方向已经很清楚。

这是对R的平衡和令人惊讶的客观评估。

讨论中的建设性部分没有被浪费。你听取R用户的意见和建议。我们也有兴趣改进这个平台。

当然你是在开始阶段,但无论如何,R疫苗将加强MCL。

祝你的努力工作顺利。

 

关于伯纳科夫所谈到的公约。

考虑一下三个非常不同的案例。

1.除以一个等于零的常数。

在R中,我们有这样的结果

> 1/0
[1] Inf

这是一个正确的结果吗?

对于解释器来说,这个结果必须被认为是正确的,因为我们不能终止R

对于编译器来说,这个结果是正确的。当特殊情况发生时,程序的执行会被中断,并给予控制来处理这种特殊情况,否则会崩溃。

注意到它是多么的不同!

2.除以一个变量,等于零。

> a<-0
> 1/a
[1] Inf

严格来说,这个变体与前一个变体不同。

除a=0外,函数1/a在任何地方都是连续的,此时左边的极限=-Inf,右边的极限=+Inf。

R不理解这一点,但你可以接受,因为负无穷大和正无穷大之间的差异在数学中是有意义的,而不是在程序代码中。


3.两个无限小的量的除法,在它们对零的渴望中。

> sin(a)/a
[1] NaN

NaN的含义对我来说根本没有解释。但很明显,鉴于第2点,R并不理解极限本身。

这些是R作为一个编程系统的错误吗?我不知道。最有可能的是,R文档应该告知这样的细微差别,但那样的话,在目前大约13万个函数的情况下,如何实现分散开发?我们需要这样做吗?

从这个意义上讲,产生的讨论是什么?

决定是在岸上做出的。

1.我们拿着R,直截了当地把代码转到MKL。同时,我们必须认识到,上述变体在R的不同功能中可能有不同的解释。

2.声明协议,在我提到的情况下,哪些价值将被接受(清单可能不完整)。我们彻底检查R代码,如果它不符合我们的设置,我们就把它从R移植到MCL,并根据我们的协议进行修正。在这种情况下,由于集中开发,我们一贯执行所采用的惯例,从这个意义上说,我们有一个更好的系统。