1 个不稳定版本
0.1.0 | 2021 年 10 月 26 日 |
---|
#1878 在 算法 中
48KB
282 行
整数形式的 Hoeffding 依赖系数
这是 Wassley Hoeffding 1948 年提出的用于检测数据或变量中 -经常非线性- 关系的方程。Wassley Hoeffding 出现在现代非参数统计学的创建中,Hoeffding 的工作启发了数十年的额外工作。(Evygene Slutsky 可能预见了 Hoeffding 在依赖性方面的一些工作,但冷战、坚忍的人以及西方出版很少。)
Hoeffding D = 30 [ (n-2)(n-3)Sum[(Qi-1)(Qi-2)] + Sum[(Ri-1)(Ri-2)(Si-1)(Si-2)] - 2(n-2)Sum[(Ri-2)(Si-2)(Qi-1)] ] / [ n(n-1)(n-2)(n-3)(n-4)]
"H_integer D" = 256 * [ (n-2)(n-3)Sum[(Qi-1)(Qi-2)] + Sum[(Ri-1)(Ri-2)(Si-1)(Si-2)] - 2(n-2)Sum[(Ri-2)(Si-2)(Qi-1)] ]
在此依赖性计算的变化中,关联是通过将原始统计量乘以 n(n-1)(n-2)(n-3)(n-4)(256/30)(n=配对数量)来使用整数计算的。较高的值具有更强的关联性 - 在机器学习或遗传算法适应性评估中检测有用的模型特别有用,尤其是在非线性情况下。
对于给定的配对比较长度,可以计算整数形式的最小和最大值。
用 Rust 编写,用于泛型部分序类型(比较 {"g","e","n","e","r","i","c","s"} 和 {3.0,1.0,4.0,1.0,5.0,4.0,3.5,6.1})。是的 - 直接比较不同的数据类型 - 如果它们排序,它们很可能会通过 Hoeffding_Integer 运行。
为什么?
为什么用 Rust 编程?Rust 快速,并教会了我更好的编程方式!
为什么是整数?一个 ?幻想?整数 Hoeffding 是向 Hoeffding 依赖系数 D 的 GPU 计算迈进的一步。以及当 n 变大时(理论上导致更高分辨率的统计量)分母的阶乘使小进步变得微不足道(如果你有 n=1587 对,小的进步被分母 10003350094863840 除,因此在有限的浮点小数中很可能消失。)
Hoeffding 依赖系数有什么好处?为遗传算法和机器学习中的非线性模型分配适应性。
数学
请阅读 main.rs 或 lib.rs 中的百行数学!我已经尝试使统计量的计算可以验证、遵循和理解。
如何使用
首先,将 hoeffding_integer 添加到您的 cargo 文件中(来自 crates.io,截至 2021 年 10 月我尚未在 crates.io 上发布...但很快)
let textdata: Vec<&str> = vec!["a","a","a","b","b","b","c","c","c"]; let numdata: Vec = vec![ 1 , 2 , 3 , 4 , 5 , 5 , 6 , 7 , 8 ];;
定义整数类型的霍夫丁依赖统计量:hoeffding_dependence_statistic_as_integer:i128 = hoeffding_integer[textdata, numdata]; 定义依赖的最小值:dependence_min = hoeffding_integer_minimum( textdata.len() ); 定义依赖的最大值:dependence_max = hoeffding_integer_maximum( textdata.len() );
比较文本和数字:{:?} 与 {:?},&textdata,&numdata; 霍夫丁的依赖系数 D 作为整数:{}", hoeffding_dependence_statistic_as_integer; 统计量的可能最小值和最大值:{} <--> {}",dependence_min, dependence_max);