Amo*_*wal 6 python machine-learning pca scikit-learn
我一直在使用scikit-learn中实现的PCA.但是,我想找到在我们拟合训练数据集后得到的特征值和特征向量.文档中没有提到这两者.
其次,这些特征值和特征向量本身可以用作分类目的的特征吗?
小智 9
我在这里假设,通过EigenVectors,你的意思是协方差矩阵的特征向量.
假设你在p维空间中有n个数据点,X是你的点的apxn矩阵,那么主成分的方向是协方差矩阵XX T的特征向量.您可以通过访问对象的components_属性从sklearn获取这些EigenVectors的方向PCA.这可以按如下方式完成:
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_
Run Code Online (Sandbox Code Playgroud)
这给出了类似的输出
[[ 0.83849224 0.54491354]
[ 0.54491354 -0.83849224]]
Run Code Online (Sandbox Code Playgroud)
其中每一行都是p维空间中的主要组成部分(本玩具示例中为2).这些行中的每一行是居中协方差矩阵XX T的特征向量.
就特征值而言,没有直接的方法可以从PCA对象中获取它们.该PCA对象确实有一个名为的属性explained_variance_ratio_,它给出了每个组件的方差百分比.每个分量的这些数字与特征值成比例.在我们的玩具示例中,如果打印explained_variance_ratio_属性,我们会得到这些:
[ 0.99244289 0.00755711]
Run Code Online (Sandbox Code Playgroud)
这意味着第一主成分的特征值与第二主成分的特征值之比为0.99244289:0.00755711.
如果对PCA基本数学的理解是明确的,则获得特征向量和特征值的更好方法是使用numpy.linalg.eig中心协方差矩阵的特征值和特征向量.如果您的数据矩阵是apxn矩阵,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)
Run Code Online (Sandbox Code Playgroud)
来到你的第二个问题.这些EigenValues和EigenVectors不能用于分类.对于分类,您需要每个数据点的功能.您生成这些特征向量和特征值从整个协方差矩阵,XX衍生Ť.对于降维,您可以使用原始点的投影(在p维空间中)对由PCA获得的主要组件进行投影.但是,这并不总是有用,因为PCA没有考虑训练数据的标签.我建议你研究LDA的监督问题.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
10464 次 |
| 最近记录: |