放牧代码和思想
专注自然语言处理、机器学习算法

皮尔逊相关系数和安斯库姆四重奏

目录

《智能Web算法》在讲相关系数的时候用到了皮尔逊相关系数,我茫然不知为何物,看了定义才知道原来就是概率与数理统计课里面的相关系数r。正好概率与数理统计课的东西考完就还回去了,这边做个笔记。

皮尔逊相关系数

援引维基百科的定义:

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差标准差的商:

  • \rho _{{X,Y}}={{\mathrm  {cov}}(X,Y) \over \sigma _{X}\sigma _{Y}}={E[(X-\mu _{X})(Y-\mu _{Y})] \over \sigma _{X}\sigma _{Y}},

非常可耻的是,我连协方差是什么都忘掉了,看来水到高中水平了。

协方差(Covariance)在概率论统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。

期望值分别为E(X)=\mu E(Y)=\nu 的两个实数随机变量X 与Y 之间的协方差定义为:

  • \operatorname {cov}(X,Y)=\operatorname {E}((X-\mu )(Y-\nu ))

其中E是期望值。它也可以表示为:

  • \operatorname {cov}(X,Y)=\operatorname {E}(X\cdot Y)-\mu \nu

如果用Java来实现的话,分子应当是下面的xy/n:

        // 为每个向量计算平均值
        double avgX = getAverage(x);
        double avgY = getAverage(y);

        // 为每个向量计算标准差
        double sX = getStdDev(avgX, x);
        double sY = getStdDev(avgY, y);

        double xy = 0;

        for (int i = 0; i < n; i++)
        {
            // 计算平均偏差后的点积,也就是协方差
            xy += (x[i] - avgX) * (y[i] - avgY);
        }

分母应当是上面的sX * sY。

安斯库姆四重奏

安斯库姆四重奏是安斯库姆对皮尔逊相关系数的嘲讽,他用四幅图展示了皮尔逊相关系数相同的四个例子,这四个例子是完全不同的分布:

安斯库姆四重奏Anscombe's quartet)是四组基本的统计特性一致的数据,但由它们绘制出的图表则截然不同。每一组数据都包括了11个(x,y)点。这四组数据由统计学家弗朗西斯·安斯库姆(Francis Anscombe)于1973年构造,他的目的是用来说明在分析数据前先绘制图表的重要性,以及离群值对统计的影响之大。

这四组数据的共同统计特性如下:

性质 数值
x平均数 9
x方差 11
y的平均数 7.50(精确到小数点后两位)
y的方差 4.122或4.127(精确到小数点后三位)
xy之间的相关系数 0.816(精确到小数点后三位)
线性回归线 y=3.00+0.500x(分别精确到小数点后两位和三位)

安斯库姆四重奏的四组数据图表

在四幅图中,由第一组数据绘制的图表(左上图)是看起来最“正常”的,可以看出两个随机变量之间的相关性。从第二组数据的图表(右上图)则可以明显地看出两个随机变量间的关系是非线性的。第三组中(左下图),虽然存在着线性关系,但由于一个离群值的存在,改变了线性回归线,也使得相关系数从1降至0.81。最后,在第四个例子中(右下图),尽管两个随机变量间没有线性关系,但仅仅由于一个离群值的存在就使得相关系数变得很高。

真没想到数学这么有用。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » 皮尔逊相关系数和安斯库姆四重奏

分享到:更多 ()

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机