numpyとscikit-learnでcovarianceを出す関数への入力形式が異なる
scikit-learn…shape (array.shape) が [n_observations, n_features]
numpy…rowがvariable, columnがobservation
>>> import numpy >>> from sklearn.covariance import EmpiricalCovariance, MinCovDet >>> a = numpy.array([[99, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> numpy.cov(a) array([[ 2.35291667e+03, -4.78333333e+01, -4.78333333e+01], [ -4.78333333e+01, 1.66666667e+00, 1.66666667e+00], [ -4.78333333e+01, 1.66666667e+00, 1.66666667e+00]]) >>> EmpiricalCovariance().fit(a).covariance_ array([[ 1924.66666667, -121.33333333, -121.33333333, -121.33333333], [ -121.33333333, 10.66666667, 10.66666667, 10.66666667], [ -121.33333333, 10.66666667, 10.66666667, 10.66666667], [ -121.33333333, 10.66666667, 10.66666667, 10.66666667]])
つらい
また、sklearnのEmpiricalCovarianceでやった方がナイーブに実装した時と同じような行列になる
(20161024)
>>> numpy.cov(a.T, bias=True) array([[ 1924.66666667, -121.33333333, -121.33333333, -121.33333333], [ -121.33333333, 10.66666667, 10.66666667, 10.66666667], [ -121.33333333, 10.66666667, 10.66666667, 10.66666667], [ -121.33333333, 10.66666667, 10.66666667, 10.66666667]])