【发布时间】:2015-11-01 19:12:07
【问题描述】:
如何获取 PCA 应用程序的特征值和特征向量?
from sklearn.decomposition import PCA
clf=PCA(0.98,whiten=True) #converse 98% variance
X_train=clf.fit_transform(X_train)
X_test=clf.transform(X_test)
我在docs 中找不到它。
1.我“无法”理解这里的不同结果。
编辑:
def pca_code(data):
#raw_implementation
var_per=.98
data-=np.mean(data, axis=0)
data/=np.std(data, axis=0)
cov_mat=np.cov(data, rowvar=False)
evals, evecs = np.linalg.eigh(cov_mat)
idx = np.argsort(evals)[::-1]
evecs = evecs[:,idx]
evals = evals[idx]
variance_retained=np.cumsum(evals)/np.sum(evals)
index=np.argmax(variance_retained>=var_per)
evecs = evecs[:,:index+1]
reduced_data=np.dot(evecs.T, data.T).T
print(evals)
print("_"*30)
print(evecs)
print("_"*30)
#using scipy package
clf=PCA(var_per)
X_train=data.T
X_train=clf.fit_transform(X_train)
print(clf.explained_variance_)
print("_"*30)
print(clf.components_)
print("__"*30)
- 我希望获得所有特征值和特征向量,而不仅仅是具有收敛条件的约简集。
【问题讨论】:
-
显然,我误认为
.explained_variance_给出了实际的特征值,所以我删除了我的答案,因为它不准确。如果我想出任何办法,我会告诉你的。好问题。 -
@Akavall 一种简单的方法是将方差作为
1传递,然后获取值。但是再次运行它没有意义。请问sklearn功能中的PCA之前是否对数据进行了缩放? -
@Akavall 我不认为你弄错了。特征值由
.explained_variance_给出。这里代码使用了correlation矩阵,所以得到的特征值是不同的。
标签: python scipy scikit-learn pca