mcaパッケージ を使用して、Pythonで多重対応分析を実行しようとしています。
私はそれをどのように使用するかについて少し混乱しています。 PCA
を使用すると、一部のデータがfit(つまり、それらのデータの主成分を見つける)と予想され、後で使用できるようになります私が見つけた主成分transform目に見えないデータ。
MCAのドキュメントに基づいて、この最後の手順を実行する方法を理解できません。また、不可解な名前が付けられたプロパティとメソッドの機能も理解できません(つまり、_.E
_、_.L
_、_.K
_、_.k
_など)。
これまでのところ、文字列を含む列を持つDataFrameがある場合(これがDF内の唯一の列であると想定)、次のようにします
_import mca
ca = mca.MCA(pd.get_dummies(df, drop_first=True))
_
私が集めることができるものから
_ca.fs_r(1)
_
は、df
のデータの変換であり、
_ca.L
_
固有値になるはずです(ただし、特徴の数よりも1要素少ない_1
_ sのベクトルを取得しますか?)。
同じ機能のデータがまだある場合は、_df_new
_としましょう。これを既にダミー変数に正しく変換していると仮定して、新しいデータのca.fs_r(1)
に相当するものを見つけるにはどうすればよいですか。
Mcaパッケージのドキュメントは、その点に関してあまり明確ではありません。ただし、分析で得られた因子に新しい(目に見えない)データを投影するには、ca.fs_r_sup(df_new)
を使用する必要があることを示唆する手掛かりがいくつかあります。
他の方法の1つは、ライブラリ prince を使用して、次のようなツールを簡単に使用できるようにすることです。
まず、次のようにインストールします。
pip install --user prince
MCA
を使用するのはかなり簡単で、いくつかの手順で実行できます(sklearn PCA
メソッドと同様)。最初にデータフレームを作成します。
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
続いて、fit
および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
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')