我目前正在为学校分配作业,但我有些困惑。
分配如下:
使用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()
我的猜测是这是一个非常简单的错误,但我似乎无法弄清楚。
非常感谢所有帮助
答案 0 :(得分:0)
(我假设您正在使用scikit-learn中的PCA
)。
问题出在您的代码的以下行:
n_components = PCA(n_components= 0.9)
现在n_components
拥有PCA
类型的对象,但这不是您想要的!根据{{3}},n_components
应该是整数,浮点数,字符串或无。我认为您想这样做:
n_components = 0.9