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
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.
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.Une autre méthode consiste à utiliser la bibliothèque prince qui permet une utilisation facile d'outils tels que:
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')