刚开始看关于皮尔逊相关系数计算的代码,把我看得是晕头转向,不过在学习完概率论的课程后,发现结合公式再来看代码就会比较简单了。
期望公式
E(x)=1n∑i=1nxi
方差公式
var(x)=E{[x−E(x)]2}
=E{x2−2x×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{[x−E(x)][y−E(y)]}
=E{XY−XE(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/n−∑i=1nxi/n×∑i=1nyi/n
=E(X)E(y)−E(X)E(Y)
nden*nden
=⎡⎣∑i=1nxi2−(∑i=1nxi)2⎤⎦⎡⎣∑i=1ny2i−(∑i=1nyi)2⎤⎦
=nVar(X)Var(Y)
关于den这个变量因为公式太长不好展示只好先处理一下了
这样num/den就可以得到皮尔逊相关系数了