web-dev-qa-db-fra.com

Utilisation du package mca dans Python

J'essaie d'utiliser le package mca pour effectuer plusieurs analyses de correspondance en Python.

Je suis un peu confus quant à la façon de l'utiliser. Avec PCA je m'attendrais à ajuster certaines données (c'est-à-dire trouver les principaux composants de ces données) et plus tard, je serais en mesure d'utiliser les principaux composants que j'ai trouvés pour transformer des données invisibles.

Sur la base de la documentation MCA, je ne peux pas déterminer comment effectuer cette dernière étape. Je ne comprends pas non plus ce que font les propriétés et méthodes étrangement nommées de façon cryptique (c'est-à-dire .E, .L, .K, .k Etc.).

Jusqu'à présent, si j'ai un DataFrame avec une colonne contenant des chaînes (supposons que c'est la seule colonne du DF), je ferais quelque chose comme

import mca
ca = mca.MCA(pd.get_dummies(df, drop_first=True))

d'après ce que je peux rassembler

ca.fs_r(1)

est la transformation des données en df et

ca.L

est censé être les valeurs propres (bien que j'obtienne un vecteur de 1 s qui est un élément de moins que mon nombre de fonctionnalités?).

maintenant, si j'avais plus de données avec les mêmes fonctionnalités, disons df_new et en supposant que j'ai déjà converti cela correctement en variables factices, comment puis-je trouver l'équivalent de ca.fs_r(1) pour le nouveau Les données

10
Dan

La documentation du paquet mca n'est pas très claire à cet égard. Cependant, il existe quelques indices qui suggèrent que ca.fs_r_sup(df_new) devrait être utilisé pour projeter de nouvelles données (invisibles) sur les facteurs obtenus dans l'analyse.

  1. L'auteur du paquet se réfère aux nouvelles données comme données supplémentaires qui est la terminologie utilisée dans l'article suivant: Abdi, H., et Valentin, D. (2007) . Analyse de correspondance multiple . Encyclopédie de la mesure et des statistiques , 651-657.
  2. Le package n'a que deux fonctions qui acceptent les nouvelles données comme paramètre DF: fs_r_sup(self, DF, N=None) et fs_c_sup(self, DF, N=None). Cette dernière consiste à trouver les scores des facteurs de colonne.
  3. Le guide d'utilisation le démontre sur la base d'une nouvelle trame de données qui n'a pas été utilisée tout au long de l'analyse des composants.
3
Jan Trienes

Une autre méthode consiste à utiliser la bibliothèque prince qui permet une utilisation facile d'outils tels que:

  1. Analyse de correspondance multiple (MCA)
  2. Analyse en composantes principales (ACP)
  3. Analyse factorielle multiple (AMF)

Vous pouvez commencer par installer avec:

pip install --user prince

Pour utiliser MCA, c'est assez simple et peut être fait en quelques étapes (tout comme sklearn PCA méthode.) Nous construisons d'abord notre dataframe.

import pandas as pd 
import prince

X = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/balloons/adult+stretch.data')
X.columns = ['Color', 'Size', 'Action', 'Age', 'Inflated']

print(X.head())

mca = prince.MCA()

# outputs
>>     Color   Size   Action    Age Inflated
   0  YELLOW  SMALL  STRETCH  ADULT        T
   1  YELLOW  SMALL  STRETCH  CHILD        F
   2  YELLOW  SMALL      DIP  ADULT        F
   3  YELLOW  SMALL      DIP  CHILD        F
   4  YELLOW  LARGE  STRETCH  ADULT        T

Suivi en appelant les méthodes fit et transform.

mca = mca.fit(X) # same as calling ca.fs_r(1)
mca = mca.transform(X) # same as calling ca.fs_r_sup(df_new) for *another* test set.
print(mca)

# outputs
>>         0             1
0   0.705387  8.373126e-15
1  -0.386586  8.336230e-15
2  -0.386586  6.335675e-15
3  -0.852014  6.726393e-15
4   0.783539 -6.333333e-01
5   0.783539 -6.333333e-01
6  -0.308434 -6.333333e-01
7  -0.308434 -6.333333e-01
8  -0.773862 -6.333333e-01
9   0.783539  6.333333e-01
10  0.783539  6.333333e-01
11 -0.308434  6.333333e-01
12 -0.308434  6.333333e-01
13 -0.773862  6.333333e-01
14  0.861691 -5.893240e-15
15  0.861691 -5.893240e-15
16 -0.230282 -5.930136e-15
17 -0.230282 -7.930691e-15
18 -0.695710 -7.539973e-15

Vous pouvez même en imprimer le diagramme, car il intègre la bibliothèque matplotlib.

ax = mca.plot_coordinates(
     X=X,
     ax=None,
     figsize=(6, 6),
     show_row_points=True,
     row_points_size=10,
     show_row_labels=False,
     show_column_points=True,
     column_points_size=30,
     show_column_labels=False,
     legend_n_cols=1
     )

ax.get_figure().savefig('images/mca_coordinates.svg')

mca

2
Axois