使用mca和prince模块在Python中使用非二进制分类虚拟变量进行多重对应分析

时间:2017-05-17 05:04:33

标签: python pandas pca dimensionality-reduction

我使用python package对多个分类变量进行多重对应分析。我正在研究一组地质数据,这里是一个示例预览:

range

0 - 不存在,1 - 以非常小的(痕量)量存在,2 - 以少量存在,3 - 以中等量存在,4-以大量存在。

我的代码如下:

    Quartz  Oxides  Hematite    Limonite    Geothite    Clay    Soil_Type   
       1      2       3            4            1        0         A
       2      1       4            3            0        1         B
       3      4       2            1            4        0         A
       4      3       1            2            0        3         C
       0      2       3            4            1        2         D
       1      0       2            4            3        4         C

但是我收到错误声明:

geology = pd.read_csv('geology_data.csv')
x = geology[['RigNumber','Quartz','Oxides','Hematite','Limonite','Geothite','Clay']].fillna(0)
y = geology[['Soil_Type']]
print 'Dimensionality Reduction'
mca_ben = mca.mca(x)
print mca_ben
mca_ind = mca.mca(x, benzecri=False)
print mca_ind
print(mca.MCA.__doc__)

我怀疑mca仅限于二元虚拟变量。

我还尝试使用

将每个虚拟变量转换为单独的列
Traceback (most recent call last):
  File "C:\Users\root\Desktop\Data\raw data\new raw\merged wit npt\multiclass without productive\parameter propagation\New Predict\clustering-mca.py", line 33, in <module>
    mca_ben = mca.mca(x, ncols=31)
  File "C:\Users\root\AppData\Roaming\Python\Python27\site-packages\mca.py", line 47, in __init__
    self.D_r = numpy.diag(1/numpy.sqrt(self.r))
  File "C:\Python27\lib\site-packages\numpy\lib\twodim_base.py", line 302, in diag
    res = zeros((n, n), v.dtype)
MemoryError

但无济于事,我仍然遇到同样的错误。

请注意,我不想使用PCA because of obvious reasons.

我还使用了另一个名为prince的python包,我尝试了documentation中的示例,不幸的是我也收到了错误:

x = pd.get_dummies(x)

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我不确定第一个错误,但第二个错误很可能是因为prince是一个仅支持python3的软件包,它不支持python 2。

答案 1 :(得分:2)

我正在使用python 3和mca-library。您应该创建一个指标矩阵并在该矩阵上执行MCA,类mca具有虚函数:

dummy(DF, cols=None)

然后您可以将其用作:

x_dummy = mca.dummy(x)
mca_ben = mca.mca(x_dummy)