在 Python 中使用 mca 包

Using mca package in Python

我正在尝试使用 mca package 在 Python 中进行多重对应分析。

我对如何使用它有点困惑。使用 PCA 我希望 适合 一些数据(即找到这些数据的主要成分)然后我将能够使用我找到的主要成分 转换看不见的数据。

根据 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

应该是特征值(虽然我得到一个 1s 的向量,它比我的特征数量少一个元素?)。

现在如果我有更多具有相同特征的数据,比如说 df_new 并假设我已经将其正确转换为虚拟变量,我如何找到 ca.fs_r(1) 的等价物新数据

mca 包的文档在这方面不是很清楚。但是,有一些线索表明应该使用 ca.fs_r_sup(df_new) 将新的(未见过的)数据投射到分析中获得的因子上。

  1. 包作者将新数据称为 补充数据,这是以下论文中使用的术语:Abdi, H., & Valentin, D. (2007)。 Multiple correspondence analysis测量与统计百科全书, 651-657.
  2. 该包只有两个接受新数据作为参数的函数 DFfs_r_sup(self, DF, N=None)fs_c_sup(self, DF, N=None)。后者是求column factor scores.
  3. usage guide 基于在整个组件分析中未使用的新数据框对此进行了演示。

另一种方法是使用库 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

接着调用fittransform方法。

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