Используя featuretool, как индивидуально использовать примитивы dfs? - PullRequest
0 голосов
/ 07 февраля 2020

Не могли бы вы помочь мне? когда я использовал feturestools, я использую набор данных iris, он имеет 4 функции: f1, f2, f3, f4, когда я использую ft.dfs, у меня 3 вопроса о буксировке. 1. Я обнаружил, что feature_matrix имеет слишком много функций. «div_by_feature» и «modulo_numeri c» не влияли на оригинальные функции по отдельности. Вначале он действует в методе diver_by_feature, затем получает 4 новых объекта, а затем действует 'modulo_numeri c' в отношении оригинальных и новых функций. Я надеюсь, что два примитива могут действовать на оригинальные функции индивидуально Как я должен сделать? 2. Я использую примитивы преобразования, такие как trans_primitives = ['subtract_numeric_scalar', 'modulo_numeri c']. Я обнаружил, что subtract_numeric_scalar может передавать значение, однако я не знаю, как передать? 3. Интересно, как использовать все примитивы преобразования? default, trans_primitives = None, сейчас я могу решить это следующим образом: trans_primitives = ['is_null', 'diff', ...], однако, я думаю, что это проблема.

Не могли бы вы дать мне совет? Спасибо!

введите описание изображения здесь

1 Ответ

0 голосов
/ 10 февраля 2020
  1. Вы можете использовать max_depth для управления сложностью функций. Когда max_depth=1, примитивы будут использовать только оригинальные функции.

    features = ft.dfs(
        entityset=es,
        target_entity='data',
        trans_primitives=['divide_by_feature', 'modulo_numeric'],
        features_only=True,
        max_depth=1,
    )
    
    [<Feature: f1>,
    <Feature: f2>,
    <Feature: f3>,
    <Feature: f4>,
    <Feature: 1 / f3>,
    <Feature: 1 / f1>,
    <Feature: 1 / f2>,
    <Feature: 1 / f4>,
    <Feature: f1 % f2>,
    <Feature: f4 % f3>,
    <Feature: f4 % f2>,
    <Feature: f1 % f3>,
    <Feature: f2 % f4>,
    <Feature: f4 % f1>,
    <Feature: f3 % f2>,
    <Feature: f3 % f1>,
    <Feature: f2 % f1>,
    <Feature: f3 % f4>,
    <Feature: f2 % f3>,
    <Feature: f1 % f4>]
    
  2. Вы можете создать экземпляр примитива с параметрами. Вот как вы можете передать значение в subtract_numeric_scalar.

    from featuretools.primitives import SubtractNumericScalar
    
    ft.dfs(
        ...
        trans_primitives=[SubtractNumericScalar(value=2)]
    )
    
  3. Вы можете использовать все примитивы преобразования, извлекая имена из списка примитивов.

    primitives = ft.list_primitives()
    primitives = primitives.groupby('type')
    transforms = primitives.get_group('transform')
    transforms = transforms.name.values.tolist()
    
    ['less_than_scalar',
    'divide_numeric',
    'latitude',
    'add_numeric',
    'week',
    'greater_than_equal_to_scalar',
    'and',
    'multiply_numeric_scalar',
    'not',
    'second',
    'greater_than_scalar',
    'modulo_numeric_scalar',
    'scalar_subtract_numeric_feature',
    'diff',
    'day',
    'cum_min',
    'divide_by_feature',
    'less_than_equal_to',
    'time_since',
    'time_since_previous',
    'cum_count',
    'year',
    'is_null',
    'num_characters',
    'equal_scalar',
    'is_weekend',
    'less_than_equal_to_scalar',
    'longitude',
    'add_numeric_scalar',
    'month',
    'less_than',
    'or',
    'multiply_boolean',
    'percentile',
    'minute',
    'not_equal_scalar',
    'greater_than_equal_to',
    'modulo_by_feature',
    'multiply_numeric',
    'negate',
    'hour',
    'cum_max',
    'greater_than',
    'modulo_numeric',
    'subtract_numeric_scalar',
    'isin',
    'cum_mean',
    'divide_numeric_scalar',
    'num_words',
    'absolute',
    'cum_sum',
    'not_equal',
    'weekday',
    'equal',
    'haversine',
    'subtract_numeric']
    

    Дайте мне знать, если это поможет.

...