Sklearn PCA: правильная размерность ПК - PullRequest
0 голосов
/ 05 марта 2019

У меня есть фрейм данных, df, который содержит столбец с именем 'event', в котором есть массив 24x24x40.Я хочу:

  • извлечь этот массив Numpy;
  • объединить его в вектор 1x23040;
  • добавить эту запись в виде столбца в новый массив или массив данных;
  • выполнить PCA для полученной матрицы.

Однако PCA создает собственные векторы с размерами «количество записей», а не «количество измерений в данных».

Чтобы проиллюстрировать мою проблему, я демонстрирую минимальный пример того, чтоотлично работает:

ПРИМЕР 1

from sklearn import datasets, decomposition

digits = datasets.load_digits()
X = digits.data

pca = decomposition.PCA()
X_pca = pca.fit_transform(X)

print (X.shape)
Result: (1797, 64)

print (X_pca.shape)
Result: (1797, 64)

В каждом случае 1797 записей с собственными векторами измерения 64.

Теперь на моем примере:

ПРИМЕР 2

 from sklearn import datasets, decomposition
 import pandas as pd
 hdf=pd.HDFStore('./afile.h5')
 df=hdf.select('batch0')

 print(df['event'][0].shape)
 Result: (1, 24, 24, 40)

 print(df['event'][0].shape.flatten())
 Result: (23040,)

 for index, row in df.iterrows():
        entry = df['event'][index].flatten()
        _list.append(entry)


 X = np.asarray(_list)
 pca = decomposition.PCA()
 X_pca=pca.fit_transform(X)

 print (X.shape)
 Result: (201, 23040)
 print (X_pca.shape)
 Result:(201, 201)

Это имеет размеры числа данных, 201 записей!

Я не знаком с фреймами данных, поэтому может случиться так, что я перебираю фрейм данных неправильно.Тем не менее, я проверил, что строки результирующего массива NumPy в X в Примере 2 могут быть изменены и построены в соответствии с ожиданиями.

Любые мысли приветствуются!

С уважением!

1 Ответ

1 голос
/ 05 марта 2019

В документации Sklearn указано, что количество компонентов, сохраняемых, если вы не укажете параметр n_components, равно min(n_samples, n_features).

Теперь перейдем к вашему примеру:

В первом примере количество выборок данных 1797 меньше количества измерений 64, поэтому оно сохраняет всю размерность (поскольку вы не указываете количество компонентов). Однако во втором примере число выборок данных намного меньше количества функций, поэтому PCA sklearns уменьшает количество измерений до n_samples.

...