gpt4 book ai didi

python - 在 scikit-learn 中查找和利用来自 PCA 的特征值和特征向量

转载 作者:太空狗 更新时间:2023-10-29 22:21:33 25 4
gpt4 key购买 nike

我一直在使用在 scikit-learn 中实现的 PCA。但是,我想找到拟合训练数据集后产生的特征值和特征向量。文档中没有提及两者。

其次,这些特征值和特征向量本身是否可以用作分类目的的特征?

最佳答案

我在这里假设特征向量是指协方差矩阵的特征向量。

假设您在 p 维空间中有 n 个数据点,X 是您的点的 p x n 矩阵,那么主成分的方向是协方差矩阵 XXT 的特征向量。您可以通过访问 PCA 对象的 components_ 属性从 sklearn 获取这些特征向量的方向。这可以按如下方式完成:

from sklearn.decomposition import PCA
import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
pca = PCA()
pca.fit(X)
print pca.components_

这给出了类似的输出

[[ 0.83849224  0.54491354]
[ 0.54491354 -0.83849224]]

其中每一行都是 p 维空间中的主要成分(在这个玩具示例中为 2)。这些行中的每一行都是居中协方差矩阵 XXT 的特征向量。

就特征值而言,没有直接的方法可以从 PCA 对象中获取它们。 PCA 对象确实有一个名为 explained_variance_ratio_ 的属性,它给出了每个分量的方差百分比。每个组件的这些数字与特征值成正比。在我们的玩具示例中,如果打印 explained_variance_ratio_ 属性,我们会得到这些:

[ 0.99244289  0.00755711]

这意味着第一主成分的特征值与第二主成分的特征值之比为 0.99244289:0.00755711

如果对PCA的基础数学理解清楚,那么获取Eigenvectors和Eigenvalues的更好方法是使用numpy.linalg.eig获取居中协方差矩阵的Eigenvalues和Eigenvectors .如果你的数据矩阵是一个p x n矩阵,X(p个特征,n个点),那么你可以使用下面的代码:

import numpy as np
centered_matrix = X - X.mean(axis=1)[:, np.newaxis]
cov = np.dot(centered_matrix, centered_matrix.T)
eigvals, eigvecs = np.linalg.eig(cov)

来到你的第二个问题。这些 EigenValues 和 EigenVectors 本身不能用于分类。对于分类,您需要每个数据点的特征。您生成的这些特征向量和特征值源自整个协方差矩阵 XXT。对于降维,您可以使用原始点(在 p 维空间中)对作为 PCA 结果获得的主成分的投影。然而,这也不总是有用,因为 PCA 没有考虑训练数据的标签。我建议您查看 LDA 以了解监督问题。

希望对您有所帮助。

关于python - 在 scikit-learn 中查找和利用来自 PCA 的特征值和特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37757172/

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