Почему Sklearn PCA нужно больше образцов, чем новых функций (n_components)? - PullRequest
0 голосов
/ 26 июня 2018

При использовании алгоритма Sklearn PCA, как этот

x_orig = np.random.choice([0,1],(4,25),replace = True)
pca = PCA(n_components=15)
pca.fit_transform(x_orig).shape

Я получаю вывод

(4, 4)

Я ожидал (хочу), чтобы это было:

(4,15)

Я понимаю, почему это происходит. В документации sklearn ( здесь ) говорится (при условии, что их '==' является оператором присваивания):

n_components == min(n_samples, n_features)

Но почему они это делают? Кроме того, как я могу преобразовать вход с формой [1,25] в [1,10] напрямую (без укладки фиктивных массивов)?

1 Ответ

0 голосов
/ 26 июня 2018

Каждый главный компонент представляет собой проекцию данных на собственный вектор ковариационной матрицы данных. Если у вас меньше выборок n , чем у объектов, ковариационная матрица имеет только n ненулевых собственных значений. Таким образом, есть только n собственных векторов / компонентов, которые имеют смысл.

В принципе, возможно иметь больше компонентов, чем образцов, но лишние компоненты будут бесполезным шумом.

Scikit-learn вызывает ошибку вместо того, чтобы молча делать что-либо . Это не позволяет пользователям стрелять себе в ногу. Наличие меньшего количества образцов, чем возможностей, может указывать на проблему с данными или неправильное представление о применяемых методах.

...