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

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

期望公式

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就可以得到皮尔逊相关系数了

你可能感兴趣的:(集体智慧编程代码详解)