web-dev-qa-db-ja.com

Pythonでのmcaパッケージの使用

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)に相当するものを見つけるにはどうすればよいですか。

10
Dan

Mcaパッケージのドキュメントは、その点に関してあまり明確ではありません。ただし、分析で得られた因子に新しい(目に見えない)データを投影するには、ca.fs_r_sup(df_new)を使用する必要があることを示唆する手掛かりがいくつかあります。

  1. パッケージの作成者は、新しいデータを補足データとして参照します。これは、次の論文で使用されている用語です:Abdi、H.&&Valentin、D.(2007) 。 多重対応分析測定と統計の百科事典、651-657。
  2. パッケージには、パラメーターDFとして新しいデータを受け入れる関数が2つだけあります:fs_r_sup(self, DF, N=None)およびfs_c_sup(self, DF, N=None)。後者は、列係数スコアを見つけることです。
  3. 使用ガイド は、コンポーネント分析全体で使用されていない新しいデータフレームに基づいてこれを示しています。
3
Jan Trienes

他の方法の1つは、ライブラリ prince を使用して、次のようなツールを簡単に使用できるようにすることです。

  1. 多重対応分析(MCA)
  2. 主成分分析(PCA)
  3. 多因子分析(MFA)

まず、次のようにインストールします。

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')

mca

2
Axois