2014-01-19 5 views
17

Я хочу корреляции между отдельными переменными и основными компонентами в python. Я использую PCA в sklearn. Я не понимаю, как я могу получить матрицу загрузки после того, как я разложил свои данные? Мой код здесь.Коэффициент нагрузки с использованием sklearn

iris = load_iris() 
data, y = iris.data, iris.target 
pca = PCA(n_components=2) 
transformed_data = pca.fit(data).transform(data) 
eigenValues = pca.explained_variance_ratio_ 

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html не упоминает, как это можно достичь.

+0

explain_variance_ratio_ возвращает собственные значения ковариационной/корреляционной матрицы. Корреляции между исходными образцовыми переменными и основными компонентами расположены где-то в другом месте, вот что я ищу. – Riyaz

+0

Векторная проекция ваших данных на главный компонент даст вам свою дисперсию в этом направлении (т. Е. Корреляцию с этим ПК). – BartoszKP

+0

не могли бы вы объяснить это. – Riyaz

ответ

5

@ RickardSjogren описывает собственные векторы, а @BigPanda дает нагрузки. Есть большая разница: Loadings vs eigenvectors in PCA: when to use one or another?.

Я создал this PCA class с методом loadings.

Нагрузки, как указано pca.components_ * np.sqrt(pca.explained_variance_), более похожи на коэффициенты при множественной линейной регрессии. Здесь я не использую .T, потому что в классе PCA, указанном выше, компоненты уже транспонированы. numpy.linalg.svd производит u, s, and vt, где vt является транспортом Герметиана, поэтому вам сначала нужно вернуться в v с vt.T.

Существует также одна важная деталь: знаки (положительный/отрицательный) на компонентах и ​​нагрузок в sklearn.PCA могут отличаться от пакетов, таких как Р. Подробнее об этом здесь:

In sklearn.decomposition.PCA, why are components_ negative?.

11

В соответствии с this blog строками pca.components_ являются векторы погрузки. Итак:

loadings = pca.components_ 
+0

Тогда, пожалуйста, не надо. Это вопрос того, в каком поле вы находитесь. В моей области (хемометрия) нагрузки определяются как единичные векторы, и вместо этого прогнозы наблюдения масштабируются в соответствии с собственными значениями для формирования оценок наблюдения. Регистры загрузки, ограниченные единичными векторами, также описаны в записи wikipedia на PCA (https://en.wikipedia.org/wiki/Principal_component_analysis#Details). Это также обсуждается в комментариях в ответе, который вы указали в своем ответе ниже (https://stats.stackexchange.com/a/143949). – RickardSjogren

6

Умножить каждый компонент по квадратному корню из соответствующего собственного значения:

pca.components_.T * np.sqrt(pca.explained_variance_) 

Это должно произвести вашу загрузку матрицы.

Смежные вопросы