Как убедиться, что загрузка принадлежит переменной в PCA - PullRequest
1 голос
/ 22 марта 2019

У меня есть следующий фрагмент кода, который я использую для выполнения PCA на моих данных:

import pandas as pd
from sklearn.decomposition import PCA
# drop the 'memberid' column
X = df[list(df.columns.difference(['memberid']))]
pca = PCA(0.80).fit(X)
Xpca = pca.transform(X)

Затем я вычисляю самую верхнюю вносящую переменную (и) в каждом главном компоненте следующим образом:

variables = df[list(df.columns.difference(['memberid']))].columns.values
uniqueVariables = []
uniqueIndices = []
for i in range(0,len(pca.explained_variance_ratio_)):
    # Grab the variable that falls in the 95th percentile of the loadings
    indices = [k for k in range(0,len(pca.components_[i])) if abs(pca.components_[i][k]) >= np.percentile(abs(pca.components_[i]),95)]
    for j in indices:
        uniqueVariables.append(variables[j])

В приведенном выше коде я храню все имена переменных в variables.Затем я выбираю индекс переменной, где загрузка падает после 95-го процентиля (иными словами, переменная (и), которая вносит наибольший вклад в этот основной компонент).

Теперь я попытаюсь нанести на график загрузки каждого отдельного главного компонента (здесь показан только 1, скажем, третий компонент princiapl, обозначенный индексом 2):

import matplotlib.pyplot as plt
indices = [k for k in range(0,len(pca.components_[2])) if abs(pca.components_[2][k]) >= np.percentile(abs(pca.components_[2]), 95)]
tempdf = {'Variable': list(variables[indices]), 
          'Value'  : list(pca.components_[2][indices])}
tempdf = pd.DataFrame(tempdf)
tempdf.set_index('Variable').sort_index(ascending=False).plot(kind='barh',figsize=(5,5))
plt.show()

Здесь мыМожно видеть, что я строю этот график на основе имен столбцов в кадре данных и загрузки основного компонента.Это дает мне следующий график (имена столбцов удалены):

Let's say the column names are A through G, for 7 variables

Допустим, имена столбцов от A до G, для 7 переменных

Вот как выглядят загрузки для этого основного компонента:

array([ 0.43144526, -0.68946464,  0.01079084, -0.0601113 , -0.0156593 ,
       -0.02898552, -0.57764895])

Мой вопрос: как мне убедиться, что значение загрузки 0,43144 принадлежит Variable A, а загрузка -0,57764 принадлежит Variable G?Я хотел бы убедиться, что правильная переменная принимает правильную загрузку.

Существуют ли более эффективные методы, чтобы убедиться, что правильная переменная переходит к нужной переменной?

...