Как сгенерировать много условий взаимодействия в Pandas?

Я хотел бы оценить регрессионную модель IV, используя множество взаимодействий с годовыми, демографическими и т. д. манекенами. . Я не могу найти явный метод сделать это в Pandas, и мне любопытно, есть ли у кого-нибудь советы.

Я думаю попробовать scikit-learn и эту функцию:

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


person pdevar    schedule 21.10.2015    source источник
comment
используйте устаревшие формулы statsmodels.sourceforge.net/devel/examples/notebooks/generated /   -  person Josef    schedule 21.10.2015
comment
Я добавил ссылку на Википедию, чтобы объяснить аббревиатуру IV.   -  person Wolf    schedule 23.10.2015
comment
Кстати: у statsmodels есть IV (IV2SLS и IVGMM в песочнице)   -  person Josef    schedule 24.10.2015


Ответы (2)


Теперь я столкнулся с похожей проблемой, когда мне нужен был гибкий способ создания конкретных взаимодействий, и я просмотрел StackOverflow. Я последовал совету в комментарии пользователя @user333700 выше и благодаря ему нашел patsy (http://patsy.readthedocs.io/en/latest/overview.html) и после поиска в Google эту интеграцию scikit-learn patsylearn (https://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

Я ответил на аналогичный вопрос здесь, где я привожу еще один пример с категориальными переменными: Как можно создать матрицу дизайна взаимодействия из категориальных переменных?

person Marcus V.    schedule 09.03.2017

Вы можете использовать функцию sklearn PolynomialFeatures. Вот пример:

Предположим, это ваша матрица дизайна (то есть функции):

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.]])

Первые 3 функции — это исходные функции, а следующие три — взаимодействие исходных функций.

person motam79    schedule 07.11.2016