gpt4 book ai didi

python - LDA 忽略 n_components?

转载 作者:太空狗 更新时间:2023-10-29 20:15:38 25 4
gpt4 key购买 nike

当我尝试使用 Scikit-Learn 中的 LDA 时,它总是只给我一个组件,即使我要求更多:

>>> from sklearn.lda import LDA
>>> x = np.random.randn(5,5)
>>> y = [True, False, True, False, True]
>>> for i in range(1,6):
... lda = LDA(n_components=i)
... model = lda.fit(x,y)
... model.transform(x)

给予

/Users/orthogonal/virtualenvs/osxml/lib/python2.7/site-packages/sklearn/lda.py:161: UserWarning: Variables are collinear
warnings.warn("Variables are collinear")
array([[-0.12635305],
[-1.09293574],
[ 1.83978459],
[-0.37521856],
[-0.24527725]])
array([[-0.12635305],
[-1.09293574],
[ 1.83978459],
[-0.37521856],
[-0.24527725]])
array([[-0.12635305],
[-1.09293574],
[ 1.83978459],
[-0.37521856],
[-0.24527725]])
array([[-0.12635305],
[-1.09293574],
[ 1.83978459],
[-0.37521856],
[-0.24527725]])
array([[-0.12635305],
[-1.09293574],
[ 1.83978459],
[-0.37521856],
[-0.24527725]])

如您所见,它每次只打印一个维度。为什么是这样?与变量共线有关系吗?

此外,当我使用 Scikit-Learn 的 PCA 执行此操作时,它会提供我想要的结果。

>>> from sklearn.decomposition import PCA
>>> for i in range(1,6):
... pca = PCA(n_components=i)
... model = pca.fit(x)
... model.transform(x)
...
array([[ 0.83688322],
[ 0.79565477],
[-2.4373344 ],
[ 0.72500848],
[ 0.07978792]])
array([[ 0.83688322, -1.56459039],
[ 0.79565477, 0.84710518],
[-2.4373344 , -0.35548589],
[ 0.72500848, -0.49079647],
[ 0.07978792, 1.56376757]])
array([[ 0.83688322, -1.56459039, -0.3353066 ],
[ 0.79565477, 0.84710518, -1.21454498],
[-2.4373344 , -0.35548589, -0.16684946],
[ 0.72500848, -0.49079647, 1.09006296],
[ 0.07978792, 1.56376757, 0.62663807]])
array([[ 0.83688322, -1.56459039, -0.3353066 , 0.22196922],
[ 0.79565477, 0.84710518, -1.21454498, -0.15961993],
[-2.4373344 , -0.35548589, -0.16684946, -0.04114339],
[ 0.72500848, -0.49079647, 1.09006296, -0.2438673 ],
[ 0.07978792, 1.56376757, 0.62663807, 0.2226614 ]])
array([[ 8.36883220e-01, -1.56459039e+00, -3.35306597e-01,
2.21969223e-01, -1.66533454e-16],
[ 7.95654771e-01, 8.47105182e-01, -1.21454498e+00,
-1.59619933e-01, 3.33066907e-16],
[ -2.43733440e+00, -3.55485895e-01, -1.66849458e-01,
-4.11433949e-02, 0.00000000e+00],
[ 7.25008484e-01, -4.90796471e-01, 1.09006296e+00,
-2.43867297e-01, -1.38777878e-16],
[ 7.97879229e-02, 1.56376757e+00, 6.26638070e-01,
2.22661402e-01, 2.22044605e-16]])

最佳答案

ThisLDA.transform 的相关降维线,它使用 scalings_。如 docstring 中所述, scalings_ 最多有 n_classes - 1 列。这就是您希望使用 transform 获得的最大列数。在您的情况下,2 个类 (True, False) 最多产生 1 列。

关于python - LDA 忽略 n_components?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26963454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com