我希望更好地了解scikit-learn的LDA对象返回的covariance_属性。
我确定我丢失了一些东西,但是我希望它是与输入数据关联的协方差矩阵。但是,当我将.covariance_与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_)
答案 0 :(得分:0)
在sklearn.discrimnant_analysis.LinearDiscriminantAnalysis
中,协方差计算如下:
In [1]: import numpy as np
...: cov = np.zeros(shape=(X.shape[1], X.shape[1]))
...: for c in np.unique(y):
...: Xg = X[y == c, :]
...: cov += np.count_nonzero(y==c) / len(y) * np.cov(Xg.T, bias=1)
...: print(cov)
array([[0.66666667, 0.33333333],
[0.33333333, 0.22222222]])
因此,它对应于每个单独类别的协方差之和乘以作为类别频率的先验。请注意,此优先级是LDA的参数。