前言
数据决定了模型效果的上限,使用复杂模型只能逼近上限!
一、特征生成的作用
1、增加特征表达能力,提升模型效果。
2、可以融入业务上的理解设计特征,增加模型的可解释性。
二、特征生成的方法
2-1、转换方式
转换方式:
1、数值类型:加减乘除等运算、排序编码、多个列统计。
2、字符串类型:
- 截取:当字符类型的值过多时,通常可以对字符类型变量做截取,以减少模型的过拟合。
- 统计频次:统计字符出现的频次。
- 统计字符长度:统计字符串出现的长度。
3、日期类型:日期间隔、月份、周几、小时数。
分组聚合方式:计数、求最大值、最小值、平均值、求和、方差、均差、绝对值自定义函数。
# import numpy as np df['c'] = np.sum(df[['a', 'b']], axis=1) # 其他聚合函数 # np.var() # np.max() # np.min() # np.abs()
使用决策树创造新特征
三、自动化特征生成工具FeatureTools
介绍:Featuretools是执行自动化特征工程的框架。它擅长将时间和关系数据集转换为用于机器学习的特征矩阵, 把常见的特征工程方法进行了自动化封装,即所谓的dfs(深度特征合成).
3-1、涉及概念&安装
实体:即一张表或者是一个dataframe,多张表的集合叫做实体集。一个实体可以看作是一个pandas的数据框表示,多个实体的集合称为实体集合。
关系:表之间的关联键的定义。
算子:指的是一些特征工程的函数。
原理:DFS(一种特征工程方法,支持从单个或者多个数据框中构造新特征, 把常见的特征工程方法进行了自动化封装。)通过将特征算子应用于Entityset的实体关系来构建新特征。
安装:
pip install featuretools -i https://mirror.baidu.com/pypi/simple
3-2、官方小栗子
导入数据集:
data :相当于有三个数据表,包括客户、会话、事务表。
import featuretools as ft data = ft.demo.load_mock_customer() customers_df = data["customers"] customers_df
输出:
sessions_df = data["sessions"] sessions_df.sample(5)
输出:
transactions_df = data["transactions"] transactions_df.sample(5)
输出:
# 指定字典,包含数据集中所有数据表的字典,数据表与其索引列和时间索引列一起传入。 dataframes = { "customers" : (customers_df, "customer_id"), "sessions" : (sessions_df, "session_id", "session_start"), "transactions" : (transactions_df, "transaction_id", "transaction_time") } # 指定数据表之间的关系 # 当两个数据帧具有一对多关系时,我们将“一个”数据帧称为“父数据帧”。父项和子项之间的关系定义如下: # (parent_dataframe, parent_column, child_dataframe, child_column) # 创建数据表之间的关联 relationships = [("sessions", "session_id", "transactions", "session_id"), ("customers", "customer_id", "sessions", "customer_id")] # 使用深度特征合成构建特征。 # 设置主实体为customers feature_matrix_customers, features_defs = ft.dfs( dataframes=dataframes, relationships=relationships, target_dataframe_name="customers", ) feature_matrix_customers
输出:
四、自动化特征生成简易算法包ATOM
参考文章:
机器学习实战 | 自动化特征工程工具Featuretools应用.
总结
自古表白多白表,常与生人道人生。