patsy中未修改的列名索引

我在使用patsy准备分类数据进行回归分析,并希望将列名映射到DesignMatrix中的索引。我尝试使用DesignInfo对象的column_name_indexes属性,但列名已经被修改以反映编码方式。

使用文档中的数据示例:

>>> from patsy import demo_data, dmatrix>>> data = demo_data("a", nlevels=3)>>> data{'a': ['a1', 'a2', 'a3', 'a1', 'a2', 'a3']}>>> x = dmatrix("a", data)>>> xDesignMatrix with shape (6, 3)  Intercept  a[T.a2]  a[T.a3]          1        0        0          1        1        0          1        0        1          1        0        0          1        1        0          1        0        1  Terms:    'Intercept' (column 0)    'a' (columns 1:3)>>> x.design_info.column_name_indexesOrderedDict([('Intercept', 0), ('a[T.a2]', 1), ('a[T.a3]', 2)])

我想通过调用以下方式来访问例如'a2'的列索引:

x.design_info.column_name_indexes['a2']

但这当然会返回KeyError: 'a2'。所以我必须自己构造修改后的键才能获得所需的列索引1

x.design_info.column_name_indexes['a[T.a2]']

有没有一种方法可以通过引用未修改的特征/列名(即'a2')来访问列索引,而不必构造修改后的键(即'a[T.a2]')?


回答:

一般来说,像a2这样的分类值与设计矩阵列之间没有一对一的映射。你所谈论的列已经比这更复杂了——它是a2a1值之间的处理对比——而且事情可以比这更复杂(例如,考虑Helmert或多项式编码)。

如果你知道你想查找变量aa2相关联的处理对比,那么你可以使用

def column_for_treatment(design_info, factor, value):    column_name = "{}[T.{}]".format(factor, value)    return design_info.column_name_indexes[colum_name]column_for_treatment(x.design_info, "a", "a2")

这看起来有点傻,但它应该能工作,考虑到上面提到的普遍问题,我不确定有什么更好的方法。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注