如何在大Pandas中产生许多相互作用的术语?

2024-05-15 17:49:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想估计一个IV回归模型,它使用了许多与年份、人口统计等虚拟数据的交互作用。我在熊猫身上找不到明确的方法来做到这一点,我很好奇是否有人有窍门。

我正在考虑尝试scikit learn和这个函数:

http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html


Tags: 数据方法函数org模型moduleshttpscikit
2条回答

我现在面临着一个类似的问题,我需要一种灵活的方法来创建特定的交互,并查看StackOverflow。我按照上面@user333700注释中的提示操作,并感谢他找到了patsyhttp://patsy.readthedocs.io/en/latest/overview.html),在谷歌搜索之后,这个scikit学习集成patsy learnhttps://github.com/amueller/patsylearn)。

所以通过@motam79的例子,这是可能的:

import numpy as np
import pandas as pd
from patsylearn import PatsyModel, PatsyTransformer
x = np.array([[ 3, 20, 11],
   [ 6,  2,  7],
   [18,  2, 17],
   [11, 12, 19],
   [ 7, 20,  6]])
df = pd.DataFrame(x, columns=["a", "b", "c"])
x_t = PatsyTransformer("a:b + a:c + b:c", return_type="dataframe").fit_transform(df)

这将返回以下信息:

     a:b    a:c    b:c
0   60.0   33.0  220.0
1   12.0   42.0   14.0
2   36.0  306.0   34.0
3  132.0  209.0  228.0
4  140.0   42.0  120.0

我在这里回答了一个类似的问题,在这里我提供了另一个带有分类变量的示例: How can an interaction design matrix be created from categorical variables?

您可以使用sklearn的多项式函数。下面是一个例子:

假设,这是您的设计(即功能)矩阵:

x = array([[ 3, 20, 11],
       [ 6,  2,  7],
       [18,  2, 17],
       [11, 12, 19],
       [ 7, 20,  6]])


x_t = PolynomialFeatures(2, interaction_only=True, include_bias=False).fit_transform(x)

结果如下:

array([[   3.,   20.,   11.,   60.,   33.,  220.],
       [   6.,    2.,    7.,   12.,   42.,   14.],
       [  18.,    2.,   17.,   36.,  306.,   34.],
       [  11.,   12.,   19.,  132.,  209.,  228.],
       [   7.,   20.,    6.,  140.,   42.,  120.]])

前三个特征是原始特征,后三个是原始特征的交互作用。

相关问题 更多 >