LDA:置信区间的省略号:doc中的错误?

时间:2016-09-15 15:53:27

标签: python scikit-learn

TL; DR

在LDA分析后绘制置信区间: 我应该使用所有类共享的协方差矩阵(lda.covariance_),还是应该计算并使用每个类的协方差矩阵?

长问题

前段时间,我问了一个关于如何在点周围绘制椭圆的问题:Draw ellipses around points

这些椭圆将代表线性判别分析(LDA)数据点的置信区间。

我将重复使用我从科学出版物中获得的旧图片:

enter image description here

在LDA计算之后,红点(例如)可以定义如下:

[[-23.88315146  -3.26328266]  # first point
 [-25.94906669  -1.47440904]  # second point
 [-26.52423229  -4.84947907]]  # third point

你可以在图片上看到红点被椭圆包围,这表示红点均值的置信区间(在某个水平)。

这是我想要获得的。现在scikit-learn的doc有一个例子(here):

def plot_ellipse(splot, mean, cov, color):
    v, w = linalg.eigh(cov)
    u = w[0] / linalg.norm(w[0])
    angle = np.arctan(u[1] / u[0])
    angle = 180 * angle / np.pi  # convert to degrees
    # filled Gaussian at 2 standard deviation
    ell = mpl.patches.Ellipse(mean, 2 * v[0] ** 0.5, 2 * v[1] ** 0.5,
                              180 + angle, color=color)

这个函数就像这样调用:

plot_ellipse(splot, lda.means_[0], lda.covariance_, 'red')

在doc的示例中,调用plot_ellipse来绘制所有类的置信区间,始终使用相同的协方差:lda.covariance

然后使用

lda.covariance来确定椭圆的角度。由于lda.covariance永远不会改变,所有椭圆将具有相同的角度。

这样做在数学上是否正确?我很想说不。

在与LDA无关的另一篇文章(multidimensional confidence intervals)上,@ Joe Kington只使用了“分散点的2-sigma椭圆”。他计算每个班级的协方差:

cov = np.cov(points, rowvar=False)

,例如,points将是上述3点。然后他使用类似的方法计算椭圆的角度。但是当他计算每个类的协方差矩阵时,椭圆的角度在各个类别之间并不相同。

0 个答案:

没有答案