Как использовать FeatureTools для создания новых функций путем скрещивания объектов в таблице? - PullRequest
0 голосов
/ 08 мая 2018

Пересечение объектов - очень распространенный метод поиска нелинейных связей в наборе данных. Как использовать FeatureTools для создания новых функций путем скрещивания объектов в таблице?

1 Ответ

0 голосов
/ 09 мая 2018

Можно автоматически пересекать каждую пару числовых функций в Featuretools, используя примитив Multiply. В качестве примера кода предположим, что у нас есть вымышленный фрейм данных

       index  price  shares_bought       date
index                                        
1          1   1.00              3 2017-12-29
2          2   0.75              4 2017-12-30
3          3   0.60              5 2017-12-31
4          4   0.50             18 2018-01-01
5          5   1.00              1 2018-01-02

и мы хотим умножить price на shares_bought. Мы бы запустили

es = ft.EntitySet('Transactions')
es.entity_from_dataframe(dataframe=df, entity_id='log', index='index', time_index='date')

from featuretools.primitives import Multiply

fm, features = ft.dfs(entityset=es,
                      target_entity='log',
                      trans_primitives=[Multiply])

, чтобы превратить фрейм данных в набор сущностей, а затем запустить DFS, чтобы применить Multiply во всех возможных местах. В этом случае, поскольку имеется только два числовых объекта, мы получим матрицу объектов fm, которая выглядит как

       price  shares_bought  price * shares_bought
index                                             
1       1.00              3                    3.0
2       0.75              4                    3.0
3       0.60              5                    3.0
4       0.50             18                    9.0
5       1.00              1                    1.0

Если мы хотим применить примитив к определенной паре функций вручную, это можно сделать с помощью начальных функций. Тогда наш код будет

n12_cross = Multiply(es['log']['price'], es['log']['shares_bought'])

fm, features = ft.dfs(entityset=es,
                      target_entity='log',
                      seed_features=[n12_cross])

, чтобы получить ту же матрицу функций, что и выше.


EDIT: Чтобы сделать приведенный выше кадр данных, я использовал

import pandas as pd
import featuretools as ft
df = pd.DataFrame({'index': [1, 2, 3, 4, 5],
                   'shares_bought': [3, 4, 5, 18, 1],
                   'price': [1.00, 0.75, 0.60, 0.50, 1.00]})
df['date'] = pd.date_range('12/29/2017', periods=5, freq='D')
...