Я получил эту ошибку n_components = 1000 должно быть от 0 до min (n_samples, n_features) = 2 с svd_solver = 'full' - PullRequest
3 голосов
/ 16 июня 2020

Я хочу уменьшить размерность матрицы размера (5,3844), используя уменьшение размерности pca. I got this error n_components=1000 must be between 0 and min(n_samples, n_features)=2 with svd_solver='full'.

Более 5 недель я пытаюсь понять, как это сделать.

Любая помощь будет принята с благодарностью.

coeffs = wavedec(y, 'sym5', level=5)
cA5,cD5,cD4,cD3,cD2,cD1=coeffs
result = []
    common_x = np.linspace(0,3844, len(cD1))
    for c in [cD5,cD4,cD3,cD2,cD1]:
        x = np.linspace(0, 3844, len(c))
        f = interp1d(x, c)
        result.append(f(common_x)) #(5,3844)
    pca = PCA(n_components=1000)
    pca.fit(result)
    data_pca = pca.transform(result)
    print("original shape:   ", result.shape) ##(5,3844)
    print("transformed shape:", data_pca.shape) 

1 Ответ

0 голосов
/ 29 июля 2020

Как узнать, что 1000 компонентов подходят для PCA?

Вот как вы найдете n_components:

from sklearn.decomposition import PCA
from matplotlib.pyplot import figure
from matplotlib.pyplot import plot
from matplotlib.pyplot import xlabel
from matplotlib.pyplot import ylabel
from matplotlib.pyplot import show

# Assume X is your data
pca_object = PCA().fit(X)
figure(1, figsize=(6,3), dpi=300)
plot(obj.explained_variance_, linewidth=2)
xlabel('Components')
ylabel('Explained Variaces')
show()

На отображаемом графике вы можете увидеть подходящее число из n_components

Например: введите описание изображения здесь

100 компонентов подходят для моей задачи.

...