在 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
应该是特征值(虽然我得到一个 1
s 的向量,它比我的特征数量少一个元素?)。
现在如果我有更多具有相同特征的数据,比如说 df_new
并假设我已经将其正确转换为虚拟变量,我如何找到 ca.fs_r(1)
的等价物新数据
mca 包的文档在这方面不是很清楚。但是,有一些线索表明应该使用 ca.fs_r_sup(df_new)
将新的(未见过的)数据投射到分析中获得的因子上。
- 包作者将新数据称为 补充数据,这是以下论文中使用的术语:Abdi, H., & Valentin, D. (2007)。 Multiple correspondence analysis。 测量与统计百科全书, 651-657.
- 该包只有两个接受新数据作为参数的函数
DF
:fs_r_sup(self, DF, N=None)
和 fs_c_sup(self, DF, N=None)
。后者是求column factor scores.
- usage guide 基于在整个组件分析中未使用的新数据框对此进行了演示。
另一种方法是使用库 prince,它可以轻松使用以下工具:
- 多重对应分析(MCA)
- 主成分分析 (PCA)
- 多因素分析 (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 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
应该是特征值(虽然我得到一个 1
s 的向量,它比我的特征数量少一个元素?)。
现在如果我有更多具有相同特征的数据,比如说 df_new
并假设我已经将其正确转换为虚拟变量,我如何找到 ca.fs_r(1)
的等价物新数据
mca 包的文档在这方面不是很清楚。但是,有一些线索表明应该使用 ca.fs_r_sup(df_new)
将新的(未见过的)数据投射到分析中获得的因子上。
- 包作者将新数据称为 补充数据,这是以下论文中使用的术语:Abdi, H., & Valentin, D. (2007)。 Multiple correspondence analysis。 测量与统计百科全书, 651-657.
- 该包只有两个接受新数据作为参数的函数
DF
:fs_r_sup(self, DF, N=None)
和fs_c_sup(self, DF, N=None)
。后者是求column factor scores. - usage guide 基于在整个组件分析中未使用的新数据框对此进行了演示。
另一种方法是使用库 prince,它可以轻松使用以下工具:
- 多重对应分析(MCA)
- 主成分分析 (PCA)
- 多因素分析 (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')