本文介绍了几个重要的变量相关性的度量,包括皮尔逊相关系数、距离相关性和最大信息系数等,并用简单的代码和示例数据展示了这些度量的适用性对比。
从信号的角度来看,这个世界是一个嘈杂的地方。为了弄清楚所有的事情,我们必须有选择地把注意力集中到有用的信息上。
通过数百万年的自然选择过程,我们人类已经变得非常擅长过滤背景信号。我们学会将特定的信号与特定的事件联系起来。
例如,假设你正在繁忙的办公室中打乒乓球。为了回击对手的击球,你需要进行大量复杂的计算和判断,将多个相互竞争的感官信号考虑进去。为了预测球的运动,你的大脑必须重复采样球的位置并估计它未来的轨迹。更厉害的球员还会将对手击球时施加的旋转考虑进去。最后,为了击球,你需要考虑对手的位置、自己的位置、球的速度,以及你打算施加的旋转。
所有这些都涉及到了大量的潜意识微分学。一般来说,我们理所当然的认为,我们的神经系统可以自动做到这些。
同样令人印象深刻的是,人类大脑是如何区别对待它所接收到的无数竞争信号的重要性的。例如,球的位置被认为比你身后发生的对话或你面前打开的门更重要。
这听起来似乎不值得一提,但实际上这证明了可以多大程度上学习从噪声数据中做出准确预测。
当然,一个被给予连续的视听数据流的空白状态机将会面临一个困难的任务,即确定哪些信号能够最好地预测最佳行动方案。
幸运的是,有统计和计算方法可以用来识别带噪声和复杂的数据中的模式。
相关性
一般来说,当我们谈到两个变量之间的「相关性」时,在某种意义上,我们是指它们的「关系」。
相关变量是包含彼此信息的变量。两个变量的相关性越强,其中一个变量告诉我们的关于另一个变量的信息就越多。
cos()的值将根据两个箭头向量之间的角度而发生变化。
当角度为零时,cos()等于1。
去中心化筹款平台Polkastarter公布新的项目启动指导方针:8月26日消息,去中心化筹款平台Polkastarter公布新的项目启动指导方针,涉及上市、分发、流动性、审计、营销、透明度、退款等方面,要求所有使用Polkastarter 启动的项目都必须遵守新旧服务条款。[2022/8/26 12:50:48]
当角度为-180°时,cos()等于-1。
当角度为90°时,cos()等于0。
这可能看起来很熟悉——一个介于+1和-1之间的衡量标准似乎描述了两个向量之间的关系?那不是Pearson’sr吗?
那么——这正是它的解释!通过将数据视为高维空间中的箭头向量,我们可以用它们之间的角度作为相似度的衡量。
无盛行风向时,小船随机漂流
如果存在盛行风向,那么小船漂流的方向将依赖于风的强度。风力越强,依赖性越显著。
有盛行风向时,小船倾向于同向漂流
与之类似,无关变量可以被看作无盛行风向时随机漂流的小船;相关变量可以被看作在盛行风向影响下漂流的小船。在这个比喻中,风的强弱就代表着两个变量之间相关性的强弱。
如果我们允许盛行风向在湖面的不同位置有所不同,那么我们就可以引入非线性的概念。距离相关性利用「小船」之间的距离推断盛行风的强度。
置信区间?
我们可以采取「重采样」方法为距离相关性估计建立置信区间。一个简单的例子是bootstrap重采样。
Wirex与乌兹别克斯坦直接投资基金签署谅解备忘录,支持区块链技术的实施:金色财经报道,数字支付平台Wirex宣布与乌兹别克斯坦直接投资基金签署谅解备忘录。通过此次合作,该公司将支持乌兹别克斯坦政府为各种政府服务实施区块链解决方案和分布式账本技术。
与Wirex的合作正值乌兹别克斯坦希望成为实施创新金融技术的中亚领导者的关键时刻。最近为该国的行业建立了具有前瞻性的监管框架,此举旨在进一步吸引散户和机构投资者。除了合作伙伴关系之外,Wirex还计划为多个项目提供金融投资,以促进金融和区块链领域的增长,使3500万乌兹别克斯坦人能够获得区块链技术的好处。(美通社)[2022/9/28 22:37:26]
这是一个巧妙的统计技巧,需要我们从原始数据集中随机抽样以「重建」数据。这个过程将重复多次,每次都计算感兴趣的统计量。
这将为我们感兴趣的统计量产生一系列不同的估计值。我们可以通过它们估计在给定置信水平下的上限和下限。
请看下面的R语言代码,它实现了简单的bootstrap函数:
bootstrap<-function(x,y,reps,alpha){estimates<-c()original<-data.frame(x,y)N<-dim(original)for(iin1:reps){S<-originalestimates<-append(estimates,distanceCorrelation(S$x,S$y)。u<-alpha/2;l<-1-uinterval<-quantile(estimates,c(l,u))return(2*(dcor(x,y))-as.numeric(interval)。Billions项目组-->0.237to0.546
如果你想建立统计显著性,还有另一个重采样技巧,名为「排列检验」。
排列检验与上述bootstrap方法略有不同。在排列检验中,我们保持一个向量不变,并通过重采样对另一个变量进行「洗牌」。这接近于零假设——即,在变量之间不存在依赖关系。
去中心化金融协议栈xDeFi将于今日16点开启流动性挖矿:去中心化金融协议栈xDeFi宣布将于3月25日16点在区块高度12107000处开启流动性挖矿,首批支持17个X/ETH/DAI/XDEX(32:32:32:4)资金池,包括XDEX、UNI、SUSHI、LINK、SNX、sUSD、1inch、CRV、ZRX、BAL、KNC、BNT、LRC、ZKS、FRAX、FXS和LON相关资金池。目前,总锁仓金额约为438万美元。[2021/3/25 19:16:43]
这个经「洗牌」打乱的变量将被用于计算它和常变量间的距离相关性。这个过程将被执行多次,然后,结果的分布将与实际距离相关性相比较。
然后,大于或等于「实际」结果的经「洗牌」的结果的比例将被定为P值,并与给定的显著性阈值进行比较。
以下是上述过程的代码实现:
permutationTest<-function(x,y,reps){observed<-distanceCorrelation(x,y)y_i<-sample(y,length(y),replace=T)estimates<-append(estimates,distanceCorrelation(x,y_i)。p_value<-mean(estimates>=observed)return(p_value。Billions项目组-->0.036
最大信息系数
最大信息系数于2011年提出,它是用于检测变量之间非线性相关性的最新方法。用于进行MIC计算的算法将信息论和概率的概念应用于连续型数据。
深入细节
由克劳德·香农于20世纪中叶开创的信息论是数学中一个引人注目的领域。
信息论中的一个关键概念是熵——这是一个衡量给定概率分布的不确定性的度量。概率分布描述了与特定事件相关的一系列给定结果的概率。
概率分布的熵是「每个可能结果的概率乘以其对数后的和」的负值
为了理解其工作原理,让我们比较下面两个概率分布:
BB回复网友指责:尊重EOS的去中心化以及不断发展监管合法化:今日,推特用户表示EOSVC并没有做到支持EOSIO生态,Block.oneCEOBrendan Blumer对此进行了回复。BB表示,
1.我们与我们的GP(基金的普通合伙人)一直保持密切的沟通合作,以最好的方式使他们的努力最大化,并确保他们的任务得到维护。我们的GP确实会与被投资人签订侧函,说明利用我们软件的意向。
2.我们也在确保在现有GP之外,在未来的资本部署中发挥更直接的作用。我们100%遵守EOSVC的承诺,作为一个组织,我们有能力通过有效的融资来发展生态系统。
3.我们即将推出的产品旨在帮助解决一些合规问题,这些问题限制了我们可以直接参与的加密业务。
4.我们正在非常迅速地将这些解决方案以合规、规范和创新的方式推向市场,以支持机构和散户的参与,这是DeFi目前的形式无法做到的。
5.我知道有时可能会觉得B1比小企业在没有强大的法律考虑的情况下推出产品的速度要慢。事实确实如此,但我也可以向你保证,我们的进展非常快,所有的事情都考虑到了。我期望这将很快得到更多的赞赏。
6.相对于同行,我们在过去成功地驾驭了复杂的法律问题的,这证明了我们是多么认真地考虑了各个方面,并尊重EOS的去中心化现实,以及不断推出和快速发展的监管合法化。
7.尽管如此,我们充分认识到将法律审慎与竞争创新相结合以创造具体价值主张的重要性;这是我的工作重点,我知道我们下一步的工作将产生很大的影响。[2021/1/5 16:28:23]
X轴标明了可能的结果;Y轴标明了它们各自的概率
左侧是一个常规六面骰子结果的概率分布;而右边的六面骰子不那么均匀。
从直觉上来说,你认为哪个的熵更高呢?哪个骰子结果的不确定性更大?让我们来计算它们的熵,看看答案是什么。
entropy<-function(x){pr<-prop.table(table(x))H<-sum(pr*log(pr,2))return(-H。dice1<-1:6dice2<-c(1,1,1,1,2:6)entropy(dice1)Billions项目组-->2.281
去中心化资管协议Plouto将于今日20:00支持合规稳定币HUSD挖矿:据官方消息,去中心化资管协议Plouto将于今日20:00支持合规稳定币HUSD的资产管理,并在Pool 1矿池上线HUSD挖矿。届时HUSD持有者可以通过充值HUSD参与挖矿获取治理代币PLU。 自9月26日21:00开启挖矿以来,Plouto目前锁仓资产1100万USDT,PLU已上线Balance和Uniswap等交易所,其在Balance上的流动性达30万USDT。
Plouto.finance 是一个去中心化资产管理协议,在行业首次提出了开放金库的概念,支持主流稳定币及Uniswap LP挖矿,其治理代币PLU总量30万枚,完全实行“三无”的无预挖,无私募,无分配方案,全部挖矿产出,合约代码目前已通过链安科技审计。
HUSD是由Stable Universal发行的合规稳定币,与美元1:1锚定。Stable Universal旨在将HUSD打造成为安全、合规、便捷的稳定币。[2020/10/19]
不出所料,常规骰子的熵更高。这是因为每种结果的可能性都一样,所以我们不会提前知道结果偏向哪个。但是,非常规的骰子有所不同——某些结果的发生概率远大于其它结果——所以它的结果的不确定性也低一些。
这么一来,我们就能明白,当每种结果的发生概率相同时,它的熵最高。而这种概率分布也就是传说中的「均匀」分布。
交叉熵是熵的一个拓展概念,它引入了第二个变量的概率分布。
crossEntropy<-function(x,y){prX<-prop.table(table(x))prY<-prop.table(table(y))H<-sum(prX*log(prY,2)。
两个相同概率分布之间的交叉熵等于其各自单独的熵。但是对于两个不同的概率分布,它们的交叉熵可能跟各自单独的熵有所不同。
这种差异,或者叫「散度」可以通过KL散度量化得出。
两概率分布X与Y的KL散度如下:
概率分布X与Y的KL散度等于它们的交叉熵减去X的熵
KL散度的最小值为0,仅当两个分布相同。
KL_divergence<-function(x,y){kl<-crossEntropy(x,y)-entropy(x)return(kl。
为了发现变量具有相关性,KL散度的用途之一是计算两个变量的互信息。
互信息可以定义为「两个随机变量的联合分布和边缘分布之间的KL散度」。如果二者相同,MI值取0。如若不同,MI值就为一个正数。二者之间的差异越大,MI值就越大。
为了加深理解,我们首先简单回顾一些概率论的知识。
变量X和Y的联合概率就是二者同时发生的概率。例如,如果你抛掷两枚硬币X和Y,它们的联合分布将反映抛掷结果的概率。假设你抛掷硬币100次,得到「正面、正面」的结果40次。联合分布将反映如下:
P(X=H,Y=H)=40/100=0.4
jointDist<-function(x,y){u<-unique(append(x,y))joint<-c()for(iinu){for(jinu){f<-xjoint<-append(joint,length(f)/N。return(joint。
边缘分布是指不考虑其它变量而只关注某一特定变量的概率分布。假设两变量独立,二者边缘概率的乘积即为二者同时发生的概率。仍以抛硬币为例,假如抛掷结果是50次正面和50次反面,它们的边缘分布如下:
P(X=H)=50/100=0.5;P(Y=H)=50/100=0.5
P(X=H)×P(Y=H)=0.5×0.5=0.25
marginalProduct<-function(x,y){marginal<-c()fX<-length(x)/NfY<-length(y)/Nmarginal<-append(marginal,fX*fY。return(marginal。
现在让我们回到抛硬币的例子。如果两枚硬币相互独立,边缘分布的乘积表示每个结果可能发生的概率,而联合分布则为实际得到的结果的概率。
如果两硬币完全独立,它们的联合概率在数值上等于边缘分布的乘积。若只是部分独立,此处就存在散度。
这个例子中,P(X=H,Y=H)>P(X=H)×P(Y=H)。这表明两硬币全为正面的概率要大于它们的边缘分布之积。
联合分布和边缘分布乘积之间的散度越大,两个变量之间相关的可能性就越大。两个变量的互信息定义了散度的度量方式。
X和Y的互信息等于「二者边缘分布积和的联合分布的KL散度」
mutualInfo<-function(x,y){joint<-jointDist(x,y)marginal<-marginalProduct(x,y)Hjm<--sum(joint*log(marginal,2))Hj<--sum(joint*log(joint,2))return(Hjm-Hj。
此处的一个重要假设就是概率分布是离散的。那么我们如何把这些概念应用到连续的概率分布呢?
分箱算法
其中一种方法是量化数据。这是通过分箱算法实现的,它能将连续的数据点分配对应的离散类别。
此方法的关键问题是到底要使用多少「箱子」。幸运的是,首次提出MIC的论文给出了建议:穷举!
也就是说,去尝试不同的「箱子」个数并观测哪个会在变量间取到最大的互信息值。不过,这提出了两个挑战:
要试多少个箱子呢?理论上你可以将变量量化到任意间距值,可以使箱子尺寸越来越小。
互信息对所用的箱子数很敏感。你如何公平比较不同箱子数目之间的MI值?
第一个挑战从理论上讲是不能做到的。但是,论文作者提供了一个启发式解法。他们也给出了可试箱子个数的上限。
最大可用箱子个数由样本数N决定
至于如何公平比较取不同箱子数对MI值的影响,有一个简单的做法……就是归一化!这可以通过将每个MI值除以在特定箱子数组合上取得的理论最大值来完成。我们要采用的是产生最大归一化MI总值的箱子数组合。
互信息可以通过除以最小的箱子数的对数来归一化
最大的归一化互信息就是X和Y的最大信息系数。我们来看看一些估算两个连续变量的MIC的代码。
MIC<-function(x,y){maxBins<-ceiling(N**0.6)MI<-c()for(iin2:maxBins){for(jin2:maxBins){if(i*j>maxBins){nextXbins<-i;Ybins<-jbinnedX<-cut(x,breaks=Xbins,labels=1:Xbins)binnedY<-cut(y,breaks=Ybins,labels=1:Ybins)MI_estimate<-mutualInfo(binnedX,binnedY)MI_normalized<-MI_estimate/log(min(Xbins,Ybins),2)MI<-append(MI,MI_normalized。return(max(MI)。x<-runif(100,-10,10)y<-x**2+rnorm(100,0,10)MIC(x,y)Billions项目组-->0.594to0.88
总结
为了总结相关性这一主题,我们来测试下各算法在人工生成数据上的处理能力。
完整代码:https://gist.github.com/anonymous/fabecccf33f9c3feb568384f626a2c07
噪声函数
set.seed(123)Billions项目组Simplelinearrelationshipx1<--20:20y1<-x1+rnorm(41,0,4)plot(y1~x1,pch=18)cor(x1,y1)distanceCorrelation(x1,y1)MIC(x1,y1)
Pearson'sr=+0.95
距离相关性=0.95
MIC=0.89
简单二次函数
Billions项目组Cosinex3<--20:20y3<-cos(x3/4)+rnorm(41,0,0.2)plot(y3~x3,type='p',pch=18)cor(x3,y3)distanceCorrelation(x3,y3)MIC(x3,y3)
Pearson'sr=-0.035
距离相关性=0.382
MIC=0.484
圆函数
#Circlen<-50theta<-runif(n,0,2*pi)x4<-append(cos(theta),cos(theta))y4<-append(sin(theta),-sin(theta))plot(x4,y4,pch=18)cor(x4,y4)distanceCorrelation(x4,y4)MIC(x4,y4)
Pearson'sr<0.001
距离相关性=0.234
MIC=0.218
原文链接:https://medium.freecodecamp.org/how-machines-make-predictions-finding-correlations-in-complex-data-dfd9f0d87889
本文为机器之心编译,转载请联系本公众号获得授权。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。