Scikit learn LDA协方差矩阵与计算的协方差矩阵不匹配

Scikit learn LDA协方差矩阵与计算的协方差矩阵不匹配,scikit-learn,covariance,lda,linear-discriminant,covariance-matrix,Scikit Learn,Covariance,Lda,Linear Discriminant,Covariance Matrix,我希望更好地理解scikit learn的LDA对象返回的协方差属性 我确信我遗漏了一些东西,但我希望它是与输入数据相关联的协方差矩阵。但是,当我将.convariace_u与numpy.cov()返回的协方差矩阵进行比较时,我得到了不同的结果 谁能帮我理解我错过了什么?感谢并乐意提供更多信息 请找一个简单的例子来说明下面的差异 import numpy as np from sklearn.discriminant_analysis import LinearDiscriminantAnaly

我希望更好地理解scikit learn的LDA对象返回的协方差属性

我确信我遗漏了一些东西,但我希望它是与输入数据相关联的协方差矩阵。但是,当我将.convariace_u与numpy.cov()返回的协方差矩阵进行比较时,我得到了不同的结果

谁能帮我理解我错过了什么?感谢并乐意提供更多信息

请找一个简单的例子来说明下面的差异

import numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# Sample Data
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
y = np.array([1, 1, 1, 0, 0, 0])

# Covariance matrix via np.cov
print(np.cov(X.T))

# Covariance matrix via LDA
clf = LinearDiscriminantAnalysis(store_covariance=True).fit(X, y)
print(clf.covariance_)

sklearn.判别分析.线性判别分析中,协方差计算如下:

[1]中的
:将numpy作为np导入
…:cov=np.zero(shape=(X.shape[1],X.shape[1]))
…:对于np中的c。唯一(y):
…:Xg=X[y==c,:]
…cov+=np.count\u非零(y==c)/len(y)*np.cov(Xg.T,偏差=1)
…:打印(cov)
数组([[0.666667,0.33333333],
[0.33333333, 0.22222222]])  

因此,它对应于每个单独类别的协方差乘以先验值的总和,先验值是类别频率。请注意,这是LDA的一个参数。

谢谢,这很有帮助。看起来他们是对特定类别的协方差矩阵进行加权平均,通过先验值进行加权。你有没有发现为什么他们选择这种方法而不是上面np.cov()生成的协方差矩阵?这是内部散射矩阵()的定义。正如你所说,这是协方差的平均值,在对问题建模时(在LDA中)是共享的。如果您使用的是QDA,则每个类的协方差矩阵都不同。完整数据的协方差不考虑类标签。因此,它们确实是建模问题的三种方法。