【发布时间】:2014-09-12 14:13:02
【问题描述】:
当我使用 sklearn.__version__ 0.15.0 运行这段代码时,我得到了一个奇怪的结果:
import numpy as np
from scipy import sparse
from sklearn.decomposition import RandomizedPCA
a = np.array([[1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]])
s = sparse.csr_matrix(a)
pca = RandomizedPCA(n_components=20)
pca.fit_transform(s)
使用 0.15.0 我得到:
>>> pca.explained_variance_ratio_.sum()
>>> 2.1214285714285697
使用 '0.14.1' 我得到:
>>> pca.explained_variance_ratio_.sum()
>>> 0.99999999999999978
The sum should not be greater than 1
每个选定组件解释的方差百分比。 ķ 未设置,则存储所有组件并解释的总和 方差等于 1.0
这是怎么回事?
【问题讨论】:
-
对我来说似乎是一个错误,您可以发布issue
-
我在这里添加了一个:github.com/scikit-learn/scikit-learn/issues/3469。你能发布 numpy、scipy 和你的线性代数(BLAS/ATLAS/LAPACK/等)库的版本信息吗?
-
0.14.1 中的行为是一个错误,因为无论截断如何,总和始终为 1.0。在 0.15.0 中解释的方差大于 1.0 的事实也是一个错误。但是一个不同的......
标签: python scikit-learn pca