首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Featuretools,一个自动化特征工程神器的 Python 库!

特征工程是机器学习中最耗时耗力的环节,手动构建特征不仅费时费力,还容易遗漏重要特征。今天我要介绍一个特征工程利器 -Featuretools,它能自动从多个相关数据表中发现并生成有价值的特征,大大提升特征工程的效率。

基本概念

Featuretools 的核心是深度特征合成(Deep Feature Synthesis, DFS)算法,通过预定义的特征原语(Feature Primitives)自动组合生成特征。几个关键概念:

EntitySet:数据实体集,用于组织多个相关的数据表

Entity:单个数据表

Relationship:表与表之间的关系

Feature Primitives:特征原语,用于生成新特征的运算规则

来看个简单例子:

import featuretools as ft

import pandas as pd

# 创建示例数据

customers = pd.DataFrame({

“customer_id”: [1, 2, 3],

“joined_date”: [“2020-01-01”, “2020-02-01”, “2020-03-01”]

})

orders = pd.DataFrame({

“order_id”: [1, 2, 3, 4, 5],

“customer_id”: [1, 1, 2, 2, 3],

“order_date”: [“2020-01-15”, “2020-02-15”, “2020-02-20”, “2020-03-15”, “2020-04-01”],

“amount”: [100, 200, 150, 300, 250]

})

# 创建EntitySet

es = ft.EntitySet(id=“customer_orders”)

# 添加实体

es = es.add_dataframe(

dataframe_name=“customers”,

dataframe=customers,

index=“customer_id”

)

es = es.add_dataframe(

dataframe_name=“orders”,

dataframe=orders,

index=“order_id”

)

# 建立关系

es = es.add_relationship(“customers”, “customer_id”, “orders”, “customer_id”)

# 执行特征生成

feature_matrix, feature_defs = ft.dfs(

entityset=es,

target_dataframe_name=“customers”,

max_depth=2

)

特征原语详解

Featuretools 提供了多种特征原语,分为两类:

聚合原语:

COUNT:计数

SUM:求和

AVG:平均值

MAX/MIN:最大/最小值

MODE:众数

转换原语:

YEAR/MONTH:提取时间特征

DIFF:计算差值

DIVIDE:除法运算

ADD_NUMERIC:加法运算

小贴士:

合理设置 max_depth 参数,过大的深度会导致特征数量爆炸

使用 ignore_columns 参数排除不需要的列

可以通过 agg_primitives 和 trans_primitives 参数自定义原语集合

高级用法

想要进一步提升特征质量,可以自定义特征原语:

from featuretools.primitives import AggregationPrimitive

from featuretools.variable_types import Numeric

class CustomMean(AggregationPrimitive):

name = “custom_mean”

input_types = [Numeric]

return_type = Numeric

def get_function(self):

def custom_mean(values):

return values.mean() * 1.5

return custom_mean

# 使用自定义原语

feature_matrix, feature_defs = ft.dfs(

entityset=es,

target_dataframe_name=“customers”,

agg_primitives=[“custom_mean”],

max_depth=2

)

性能优化

处理大规模数据时,可以用这些技巧提升性能:

开启并行计算:

feature_matrix, feature_defs = ft.dfs(

entityset=es,

n_jobs=-1 # 使用所有CPU核心

)

使用分块处理:

feature_matrix = ft.calculate_feature_matrix(

features=feature_defs,

entityset=es,

chunk_size=1000

)

小贴士:

数据量大时记得先做采样测试

可以用 verbose 参数查看特征生成进度

记得定期清理内存,避免OOM

生成的特征要及时做筛选,去掉无用特征

写代码10多年,深感特征工程是个技术活也是个体力活。Featuretools 让我从繁琐的特征构建中解放出来,把时间用在更有价值的模型设计上。不过还是那句话,工具再好也只是辅助,真正的特征工程还得靠对业务的深入理解。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OZBsehrTA1U-8U2DJbq7q45w0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券