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']
其他资源#
有关此方法和其他特征工程方法的更多详细信息,请查看以下资源:
或者阅读我们的书:
我们的书籍和课程都适合初学者和更高级的数据科学家。通过购买它们,您正在支持 Feature-engine 的主要开发者 Sole。