【问题标题】:Unable to extract factor loadings from sklearn PCA无法从 sklearn PCA 中提取因子载荷
【发布时间】:2018-01-25 11:56:15
【问题描述】:

我想要因子加载来查看哪些因子加载到哪些变量。我指的是以下链接:

Factor Loadings using sklearn

这是我的代码,其中 input_data 是 master_data。

X=master_data_predictors.values

#Scaling the values
X = scale(X)

#taking equal number of components as equal to number of variables
#intially we have 9 variables
pca = PCA(n_components=9)

pca.fit(X)

#The amount of variance that each PC explains
var= pca.explained_variance_ratio_

#Cumulative Variance explains
var1=np.cumsum(np.round(pca.explained_variance_ratio_, decimals=4)*100)

print var1
[ 74.75  85.85  94.1   97.8   98.87  99.4   99.75 100.   100.  ]

#Retaining 4 components as they explain 98% of variance
pca = PCA(n_components=4)
pca.fit(X)
X1=pca.fit_transform(X)

print pca.components_

array([[ 0.38454129,  0.37344315,  0.2640267 ,  0.36079567,  0.38070046,
         0.37690887,  0.32949014,  0.34213449,  0.01310333],
       [ 0.00308052,  0.00762985, -0.00556496, -0.00185015,  0.00300425,
         0.00169865,  0.01380971,  0.0142307 , -0.99974635],
       [ 0.0136128 ,  0.04651786,  0.76405944,  0.10212738,  0.04236969,
         0.05690046, -0.47599931, -0.41419841, -0.01629199],
       [-0.09045103, -0.27641087,  0.53709146, -0.55429524,  0.058524  ,
        -0.19038107,  0.4397584 ,  0.29430344,  0.00576399]])

import math
loadings = pca.components_.T * math.sqrt(pca.explained_variance_)

它给了我以下 错误“只有长度为 1 的数组可以转换为 Python 标量”

我明白这个问题。我必须遍历 pca.components_ 和 pca.explained_variance_ 数组,例如:

##just a thought
Loading=np.empty((8,4))

for i,j in (pca.components_, pca.explained_variance_):
    loading=i*math.sqrt(j)
    Loading=Loading.append(loading)
##unable to proceed further 
##something wrong here   

【问题讨论】:

    标签: python scikit-learn pca


    【解决方案1】:

    这只是混合模块的问题。对于 numpy 数组,请使用 np.sqrt 而不是 math.sqrt(它仅适用于单个值,不适用于数组)。

    你的最后一行应该是这样的:

    loadings = pca.components_.T * np.sqrt(pca.explained_variance_)
    

    这是您链接到的原始答案中的错误。我已经对它们进行了相应的编辑。

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 2020-08-19
      相关资源
      最近更新 更多