Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从SKPCA获取特征值和向量_Python_Scipy_Scikit Learn_Pca - Fatal编程技术网

Python 从SKPCA获取特征值和向量

Python 从SKPCA获取特征值和向量,python,scipy,scikit-learn,pca,Python,Scipy,Scikit Learn,Pca,如何获得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) 我在里面找不到它 1.我“无法”理解这里的不同结果 编辑: def pca_code(data): #raw_implementatio

如何获得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)
我在里面找不到它

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)
  • 我希望得到所有的特征值和特征向量,而不仅仅是具有收敛条件的约化集
  • 您的实现 您正在计算相关矩阵的特征向量,即归一化变量的协方差矩阵。
    data/=np.std(data,axis=0)
    不是经典PCA的一部分,我们只将变量居中。 因此,sklearn PCA没有预先缩放数据的功能

    除此之外,如果我们抽象出您提供的代码没有运行这一事实,那么您的做法是正确的;)。 您只会对行/列布局感到困惑。老实说,我认为从
    X=data.T
    开始,然后只使用X更容易。我在帖子末尾添加了你的代码“fixed”

    求特征值 您已经注意到,您可以使用
    clf.components\uu
    获得特征向量


    所以你有主成分。它们是协方差矩阵的特征向量I使用sklearn PCA函数。返回参数“分量”是特征向量,“解释的方差”是特征值。下面是我的测试代码

    from sklearn.decomposition import PCA
    import numpy as np
    
    
    def main():
        data = np.array([[2.5, 2.4], [0.5, 0.7], [2.2, 2.9], [1.9, 2.2], [3.1, 3.0], [2.3, 2.7], [2, 1.6], [1, 1.1], [1.5, 1.6], [1.1, 0.9]])
        print(data)
        pca = PCA()
        pca.fit(data)
    
        print(pca.components_)
        print(pca.explained_variance_)
    
    
    
    if __name__ == "__main__":
        main()
    
    当你说“特征值”时,你是指PCA的“奇异值”吗?特征值仅在矩阵PCA应用于方矩阵时才可能存在


    如果您试图使用“特征值”来确定PCA所需的适当维度,那么实际上应该使用奇异值。你可以使用pca.singular\u values来获得奇异值。

    显然,我错认为
    .explained\u variance\u
    给出了实际的特征值,所以我删除了我的答案,因为它不准确。如果我有什么发现,我会告诉你的。好问题。@Akavall一个简单的方法是将方差作为
    1
    传递,然后获取值。但是没有必要再运行它。你能告诉我sklearn中的
    PCA
    功能以前是否对数据进行了缩放吗?@Akavall我认为你没有弄错。特征值由
    给出。解释的\u方差
    。在这里,代码使用相关矩阵,因此获得的特征值不同。从pca.get_convariance()获得的协方差与cov(数据)之间的差异是什么?使用linalg.eigh,您可以将evals与evacs相乘以获得cov(数据),但如果将clf.expended_方差与clf.components_uuu相乘,您会得到什么?根据我的实验,如果n_样本>=n_特征,您只能从
    clf.components_uu>中获得特征向量,在这种情况下
    clf.components_u
    是一个方阵,假设您生成了所有组件。如果n_样本clf.components_
    是一个形状矩阵(n_成分,n_特征),其行包含主成分向量。