在Python中使用mca包

时间:2018-01-30 12:40:20

标签: python-3.x pandas scikit-learn pca

我正在尝试使用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}}用于新数据

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

mca