Эквивалент PCA Matlab в Python sklearn

#python #matlab #scikit-learn

#python #matlab #scikit-учиться

Вопрос:

Я пользователь Matlab и изучаю Python с помощью библиотеки sklearn. Я хочу перевести этот код Matlab

 [coeff,score] = pca(X)
  

Для coeff я пробовал это в Python:

 from sklearn.decomposition import PCA
import numpy as np
pca = PCA()
pca.fit(X)
coeff = print(np.transpose(pca.components_))
  

Я не знаю, правильно это или нет; для score я понятия не имею.

Может ли кто-нибудь просветить меня о правильности coeff и осуществимости score ?

Ответ №1:

У PCA sklearn есть score метод, описанный в документации:https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

Попробуйте: pca.score(X) или pca.score_samples(X) в зависимости от того, хотите ли вы оценку для каждого образца (последний) или одну оценку для всех образцов (первый)

Ответ №2:

PCA Оценка в sklearn отличается от matlab.

В sklearn pca.score() или pca.score_samples() дает логарифмическую вероятность выборок, тогда как matlab предоставляет основные компоненты.

Из документации sklearn:

Возвращает логарифмическую вероятность каждого образца.

X :
Параметры: массив, форма (n_samples, n_features) Данные.
ll :
Возвращает: array, shape (n_samples,) Log-вероятность каждого образца в текущей модели

Из документации matlab:

[coeff,score,latent] = pca(___) также возвращает оценки основных компонентов в score и отклонения основных компонентов в latent. Вы можете использовать любой из входных аргументов в предыдущих синтаксисах.

пространство главных компонентов
Оценки основных компонентов — это представления X в. Строки оценки соответствуют наблюдениям, а столбцы соответствуют компонентам.

Отклонения основных компонентов являются собственными значениями ковариационной матрицы X.

Теперь эквивалентом matlab score в pca является fit_transform() или transform() :

 >>> import numpy as np
>>> from sklearn.decomposition import PCA
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> pca = PCA(n_components=2)
>>> matlab_equi_score = pca.fit_transform(X)