谢谢,非常有意思。
请帮我解释一下我卡住的地方。也就是说,HSIC 能够显示任意经典函数Y=F(X1, X2, ...) 的依赖关系吗?
Evgeniy Chernish #:
对任何人来说可能都不行,因为相关性可能非常微弱(例如由于噪声过大),这种情况下它可能无法检测到。不过,如果数据中确实存在有意义的内容,该测试就能检测出来。
对任何人来说可能都不行,因为相关性可能非常微弱(例如由于噪声过大),这种情况下它可能无法检测到。不过,如果数据中确实存在有意义的内容,该测试就能检测出来。
我采用了另一类数据。
// Y - 符号的柱状图,X1 - 位于Y前面的柱状图,X2 - 位于X1前面的柱状图。 bool Fill( double &X1[], double &X2[], double &Y[], const int Size = 1000, const datetime Time = 0, const string Symb = NULL ) { int Pos = iBarShift(Symb, PERIOD_CURRENT, Time ? Time : TimeCurrent()); return((CopyClose(Symb, PERIOD_CURRENT, Pos, Size, Y) == Size) && (CopyClose(Symb, PERIOD_CURRENT, Pos += Size, Size, X1) == Size) && (CopyClose(Symb, PERIOD_CURRENT, Pos += Size, Size, X2) == Size)); }
在提供的重排脚本中进行了如下替换。
if (SData == Nonlinear_dependence){ /* double x1 []; MathRandomUniform(-5,5,data_,x1); double x2 []; MathRandomUniform(-5,5,data_,x2); double NormD[]; MathRandomNormal(0,0.1,data_,NormD); double y[]; ArrayResize(y,data_); for (int i=0;i<data_;i++){ y[i] = pow(x1[i],2)*cos(M_PI*x2[i]) + NormD[i]; // Y = X1^2 * cos(pi*X2) + 噪声 } */ double x1[], x2[], y[]; Fill(x1, x2, y, data_);
以下是EURUSD的结果。
Test6 (EURUSD,M1) Коэффициент корреляции (X1, Y) = 0.3757 Test6 (EURUSD,M1) Коэффициент корреляции (X2, Y) = -0.4280 Test6 (EURUSD,M1) ----------------Nonlinear_dependence------------- Test6 (EURUSD,M1) Время выполнения: 12.688 seconds Test6 (EURUSD,M1) ----------------------------------- Test6 (EURUSD,M1) Number observations 1000 Test6 (EURUSD,M1) HSIC: 0.01050641 Test6 (EURUSD,M1) p-value: 0.0000 Test6 (EURUSD,M1) Critical value: 0.0010 Test6 (EURUSD,M1) Отвергаем H0: Наблюдения зависимы
随后基于随机增量创建了一个自定义符号,并在该符号上运行了测试。
Test6 (RANDOM_EURUSD,M1) Коэффициент корреляции (X1, Y) = -0.6103 Test6 (RANDOM_EURUSD,M1) Коэффициент корреляции (X2, Y) = -0.4954 Test6 (RANDOM_EURUSD,M1) ----------------Nonlinear_dependence------------- Test6 (RANDOM_EURUSD,M1) Время выполнения: 12.656 seconds Test6 (RANDOM_EURUSD,M1) ----------------------------------- Test6 (RANDOM_EURUSD,M1) Number observations 1000 Test6 (RANDOM_EURUSD,M1) HSIC: 0.00900188 Test6 (RANDOM_EURUSD,M1) p-value: 0.0000 Test6 (RANDOM_EURUSD,M1) Critical value: 0.0009 Test6 (RANDOM_EURUSD,M1) Отвергаем H0: Наблюдения зависимы
为什么第二种情况会出现相关性?粗略地说,这三个向量(它们是随机变量的累积和)之间似乎存在相关性。
一篇很有意思的文章,之前不知道还有这种方法,谢谢。与互信息(Mutual information)相比,它是否具有某些假设性的优势?因为互信息是使用最广泛的。
我还注意到,使用快速MO模型来确定相关性通常比使用那些通常较慢的各种准则更快。虽然按理说应该是相反的 :)

新文章 希尔伯特-施密特独立性判据(HSIC)已发布:
交易者在处理金融工具报价时的主要任务是构建一个具有正数学期望值的交易系统(EA)。在设计此类系统时,通常假设用于训练和后续交易的数据中存在隐藏的依赖关系。然而,通常不会考虑对该假设进行统计检验的问题。人们认为可以通过对样本外数据进行测试来获得间接答案。
同时,对于特征与目标变量之间是否存在关系这一问题,一个具有统计意义的答案至关重要。肯定的答案支持使用预测模型,而否定的答案则让人不禁要问:算法到底想预测什么?
在数理统计中,随机变量之间是否存在概率依赖关系的问题是通过独立性检验来回答的。其中一项标准是 HSIC 统计检验,这是一种强大的非参数方法,由统计学家 Arthur Gretton 于 2005 年开发。
与仅能识别线性关系的相关系数不同,HSIC 能够同时检测线性和非线性关系。正因如此,它在机器学习中被广泛用于特征选择、因果分析和其他任务。在本文中,我们将分析 HSIC 的工作原理,并在 MQL5 环境中实现它。
作者:Evgeniy Chernish