集体智慧编程-皮尔逊相关系数代码理解

刚开始看关于皮尔逊相关系数计算的代码,把我看得是晕头转向,不过在学习完概率论的课程后,发现结合公式再来看代码就会比较简单了。

期望公式

E(x)=1ni=1nxi

方差公式
var(x)=E{[xE(x)]2}

=E{x22x×E(x)+[E(x)]}

=E(x2)2E(x)E(x)+[E(x)]2

=E(x2)[E(x)]2

期望性质
E(c)=c

因此对于上诉方差推导公式
E{2x×E(x)}=2E(x)E(E(x))=2E(x)E(x)

因为
E(x)=c


E{E(x)}=E(x)

推导方差公式有利于下面皮尔逊相关系数的推导
皮尔逊相关系数计算公式
pxy=cov(x,y)var(x)var(y)

协方差公式
cov(x,y)=E{[xE(x)][yE(y)]}

=E{XYXE(Y)YE(X)+E(X)E(Y)}

=E(XY)E(X)E(Y)

书中第三章关于皮尔逊相关系数的代码如下

sum1 = sum(v1)
sum2 = sum(v2)
sum1sq = sum([pow(v, 2) for v in v1])
sum2sq = sum([pow(v, 2) for v in v2])
pSum = sum([v1[i]*v2[i] for i in range(len(v1))])
num = pSum - (sum1*sum2/len(v1))
den = sqrt((sum1sq - pow(sum1, 2)/len(v1)) * (sum2sq - pow(sum2, 2)/len(v)))
if den == 0:
    return 0
return num/den

变量的意义(i=j)为了公式推导方便,在下面的式子中会用i代替j

sum1

sum1=i=1nxi

sum2
sum2=j=1nyj

sum1sq
sum1Sq=i=1nx2i

sum2sq
sum2sq=j=1nyj2

psum
psum=i=1nxiyi

num
num=i=1nxiyi/ni=1nxi/n×i=1nyi/n

=E(X)E(y)E(X)E(Y)

nden*nden

=i=1nxi2(i=1nxi)2i=1ny2i(i=1nyi)2

=nVar(X)Var(Y)

关于den这个变量因为公式太长不好展示只好先处理一下了

这样num/den就可以得到皮尔逊相关系数了

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值