выбор оптимального количества функций с использованием PCA/LDA/MDS в scikit

Я хочу уменьшить возможности набора данных с помощью PCA, LDA и MDS. Но я также хочу сохранить 95% дисперсии.

Я не смог найти способ указать желаемую дисперсию в формулах для соответствующих алгоритмов. Один абзац кажется актуальным в API PCA (sklearn.decomposition.PCA) —

if n_components == ‘mle’, Minka’s MLE is used to guess the dimension if 0 < n_components < 1, select the number of components such that the amount of variance that needs to be explained is greater than the percentage specified by n_components

Но как n_components может быть равно 'mle' и дроби одновременно?

установка n_components='mle' уменьшила количество функций с 40 до 39, что бесполезно.


person goelakash    schedule 28.12.2014    source источник


Ответы (1)


Объект PCA в sklearn.decomposition имеет атрибут с именем 'explained_variance_ratio_', который представляет собой массив, дающий процентное отношение общей дисперсии, за которую отвечает каждый главный компонент, в порядке убывания.

Итак, вы можете сначала создать объект PCA, чтобы он соответствовал данным.

import sklearn.decomposition.PCA as PCA
pca_obj = PCA()
x_trans = pca_obj.fit_transform(x)                   // x is the data

Теперь мы можем продолжать добавлять проценты дисперсии до тех пор, пока не получим желаемое значение (в моем случае 0,95).

s = pca_obj.explained_variance_ratio_
sum=0.0
comp=0

for _ in s:
    sum += _
    comp += 1
    if(sum>=0.95):
        break

Количество необходимых компонентов будет равно значению comp.

person goelakash    schedule 28.12.2014