您的位置:首页 > 编程语言

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

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

期望公式

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就可以得到皮尔逊相关系数了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: