RelativeFeatures#

RelativeFeatures() 将一组变量与一个或多个参考特征之间的基本数学运算应用于数据框,并将结果特征添加到数据框中。

RelativeFeatures() 使用 pandas 方法 pd.DataFrame.add()pd.DataFrame.sub()pd.DataFrame.mul()pd.DataFrame.div()pd.DataFrame.truediv()pd.DataFrame.floordiv()pd.DataFrame.mod()pd.DataFrame.pow() 通过一组参考变量来转换一组变量。

例如,如果我们有以下变量:

  • number_payments_first_quarter

  • number_payments_second_quarter

  • number_payments_third_quarter

  • number_payments_fourth_quarter

  • total_payments,

我们可以使用 RelativeFeatures() 来确定每季度的支付百分比如下:

transformer = RelativeFeatures(
    variables=[
        'number_payments_first_quarter',
        'number_payments_second_quarter',
        'number_payments_third_quarter',
        'number_payments_fourth_quarter',
    ],
    reference=['total_payments'],
    func=['div'],
)

Xt = transformer.fit_transform(X)

前述代码块将返回一个新的数据框,Xt,其中包含4个新变量,这些变量是 variables 中的每个变量与 ‘total_payments’ 的除法计算结果。

示例#

让我们深入探讨如何更详细地使用 RelativeFeatures()。首先,让我们创建一个玩具数据集:

import pandas as pd
from feature_engine.creation import RelativeFeatures

df = pd.DataFrame.from_dict(
    {
        "Name": ["tom", "nick", "krish", "jack"],
        "City": ["London", "Manchester", "Liverpool", "Bristol"],
        "Age": [20, 21, 19, 18],
        "Marks": [0.9, 0.8, 0.7, 0.6],
        "dob": pd.date_range("2020-02-24", periods=4, freq="T"),
    })

print(df)

数据集看起来像这样:

    Name        City  Age  Marks                 dob
0    tom      London   20    0.9 2020-02-24 00:00:00
1   nick  Manchester   21    0.8 2020-02-24 00:01:00
2  krish   Liverpool   19    0.7 2020-02-24 00:02:00
3   jack     Bristol   18    0.6 2020-02-24 00:03:00

我们现在可以对数值变量 Age 和 Marks 以及 Age 之间应用以下几个函数:

transformer = RelativeFeatures(
    variables=["Age", "Marks"],
    reference=["Age"],
    func = ["sub", "div", "mod", "pow"],
)

df_t = transformer.fit_transform(df)

print(df_t)

我们得到以下数据集,其中新变量的命名基于用于计算的变量和它们名称中间的函数。因此,Mark_sub_Age 表示 Mark - Age,而 Marks_mod_Age 表示 Mark % Age

    Name        City  Age  Marks                 dob  Age_sub_Age  \
0    tom      London   20    0.9 2020-02-24 00:00:00            0
1   nick  Manchester   21    0.8 2020-02-24 00:01:00            0
2  krish   Liverpool   19    0.7 2020-02-24 00:02:00            0
3   jack     Bristol   18    0.6 2020-02-24 00:03:00            0

   Marks_sub_Age  Age_div_Age  Marks_div_Age  Age_mod_Age  Marks_mod_Age  \
0          -19.1          1.0       0.045000            0            0.9
1          -20.2          1.0       0.038095            0            0.8
2          -18.3          1.0       0.036842            0            0.7
3          -17.4          1.0       0.033333            0            0.6

           Age_pow_Age  Marks_pow_Age
0 -2101438300051996672       0.121577
1 -1595931050845505211       0.009223
2  6353754964178307979       0.001140
3  -497033925936021504       0.000102

我们可以如下获取转换数据中所有特征的名称:

transformer.get_feature_names_out(input_features=None)

这将返回转换数据中所有变量的名称:

['Name',
 'City',
 'Age',
 'Marks',
 'dob',
 'Age_sub_Age',
 'Marks_sub_Age',
 'Age_div_Age',
 'Marks_div_Age',
 'Age_mod_Age',
 'Marks_mod_Age',
 'Age_pow_Age',
 'Marks_pow_Age']

其他资源#

有关此方法和其他特征工程方法的更多详细信息,请查看以下资源:

../../_images/feml.png

机器学习的特征工程#











或者阅读我们的书:

../../_images/cookbook.png

Python 特征工程手册#














我们的书籍和课程都适合初学者和更高级的数据科学家。通过购买它们,您正在支持 Feature-engine 的主要开发者 Sole。