我正在尝试使用mca package在Python中进行多重对应分析。
我对如何使用它感到有点困惑。使用PCA
我希望适合一些数据(即查找这些数据的主要组件),然后我将能够使用我发现转换<的主要组件/ em>看不见的数据。
根据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
并假设我已将此正确转换为虚拟变量,我如何找到等效的{{ 1}}用于新数据
答案 0 :(得分:3)
在这方面,mca包的文档不是很清楚。但是,有一些提示表明ca.fs_r_sup(df_new)
应该用于将新的(看不见的)数据投影到分析中获得的因子上。
DF
:fs_r_sup(self, DF, N=None)
和fs_c_sup(self, DF, N=None)
。后者是找到列因子得分。答案 1 :(得分:0)
另一种方法是使用库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')