绘制PCA的累积解释方差

时间:2018-10-26 11:40:57

标签: python python-3.x

我目前正在为学校分配作业,但我有些困惑。

分配如下:

使用ax.plot绘制累积的解释方差,并寻找可以占方差90%以上的成分数量;将此分配给n_components。

为实现这一点,我提供了以下代码:

import numpy as np


cum_exp_variance = np.cumsum(exp_variance)

print(cum_exp_variance)
fig, ax = plt.subplots()
ax.plot(cum_exp_variance)
ax.axhline(y=0.9, linestyle='--')
n_components = PCA(n_components= 0.9)

pca = PCA(n_components, random_state=10)
pca.fit(scaled_train_features)
pca_projection = pca.transform(scaled_train_features)

但是当我尝试将变量分配给n_components变量时,我总是收到错误消息。错误如下:

    TypeError                                 Traceback (most recent call last)
<ipython-input-42-a902c6ee649b> in <module>()
     15 # Perform PCA with the chosen number of components and project data onto components
     16 pca = PCA(n_components, random_state=10)
---> 17 pca.fit(scaled_train_features)
     18 pca_projection = pca.transform(scaled_train_features)

/usr/local/lib/python3.5/dist-packages/sklearn/decomposition/pca.py in fit(self, X, y)
    327             Returns the instance itself.
    328         """
--> 329         self._fit(X)
    330         return self
    331 

/usr/local/lib/python3.5/dist-packages/sklearn/decomposition/pca.py in _fit(self, X)
    382             if max(X.shape) <= 500:
    383                 svd_solver = 'full'
--> 384             elif n_components >= 1 and n_components < .8 * min(X.shape):
    385                 svd_solver = 'randomized'
    386             # This is also the case of n_components in (0,1)

TypeError: unorderable types: PCA() >= int()

我的猜测是这是一个非常简单的错误,但我似乎无法弄清楚。

非常感谢所有帮助

1 个答案:

答案 0 :(得分:0)

(我假设您正在使用scikit-learn中的PCA)。

问题出在您的代码的以下行:

n_components = PCA(n_components= 0.9)

现在n_components拥有PCA类型的对象,但这不是您想要的!根据{{​​3}},n_components应该是整数,浮点数,字符串或无。我认为您想这样做:

n_components = 0.9