Sklearn PCA не дает уникальных результатов - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь воспроизвести что-то, что я написал, на другом компьютере.Теперь с Mac я получаю это странное поведение.Я понятия не имею, что не так.Работает нормально с linux.

from sklearn.decomposition import PCA
df = df_selected1.values.copy() 
pca = PCA(n_components=2)
for i in range(5):
    pca.fit_transform(df)
    print(pca.explained_variance_)

#output
[ 5.03922837  0.06647913]
[ 15.07182343   1.55837475]
[ 18.83493071   5.11528737]
[ 8.56237035  1.2922362 ]
[ 121.51350407    0.78051842]

edit: поэтому он работает нормально, если у меня меньше строк 60. Если я добавлю больше, я получу ошибку

LinAlgError: SVD did not converge 

пример данных:

 df = pd.DataFrame([np.ndarray(90),np.ndarray(90),np.ndarray(90),np.ndarray(90)]).transpose()

1 Ответ

0 голосов
/ 28 мая 2018

Я думаю, что вы делаете что-то не так.

Пока вы не опубликуете 1) полный код, 2) данные, 3) полную ошибку и 4) версии модулей, я приведу пример с использованием случайных данных.

Пример использования 5000 строк и 4 столбцов.

import numpy as np
import pandas as pd

np.random.seed(2)
df = pd.DataFrame(np.random.rand(5000,4))
df1 = df.copy()
pca = PCA(n_components=2, random_state= 2)
for i in range(10):
     pca.fit_transform(df1)
     print(pca.explained_variance_)

[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
...