16 特征工程自动化之特征生成与转换
系列进度
AutoML 入门 · 第 16 / 29 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
图文索引
按图先建立主线,再跳回正文核对步骤、配置和判断标准。
自动特征生成可以扩大搜索空间,但也会增加过拟合和计算成本。生成越多,验证越重要。
我会记录每个新特征来源,并检查它在上线时是否也能实时计算。
在上一篇中,我们探讨了特征选择的技术,通过不同的方法来选择与模型效果相关的特征。在本篇中,我们将深入研究特征生成与转换,这是特征工程中的关键步骤之一。特征生成与转换可以显著提升模型的性能,使得机器学习算法更容易提取潜在的信息。
什么是特征生成与转换?
特征生成是指从原始数据中创造新的特征,这些特征可以使模型更好地捕捉到数据的内部结构。而特征转换则涵盖了对现有特征的修改,以提高模型性能或适应某些算法需求。
做自动特征生成与转换时,先看字段含义、时间可用性、组合规则、编码方式、泄漏风险和验证集表现。
特征生成的方法
-
多项式特征: 使用特征的多项式组合,例如对于特征和,我们可以生成新的特征如、和。
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2) X_poly = poly.fit_transform(X) -
组合特征: 在某些情况下,组合两个或多个特征可以产生有用的信息。例如,在房价预测中,您可以通过将“面积”和“房间数量”结合生成新的特征如“单位面积价格”。
df['price_per_room'] = df['price'] / df['num_rooms'] -
时间特征: 对于时间序列数据,您可以从日期中提取出许多特征,例如年、月、日、星期几等。这对捕捉周期性模式尤其有用。
df['year'] = df['date'].dt.year df['month'] = df['date'].dt.month
特征转换的方法
-
标准化与归一化: 标准化将特征缩放到均值为0、方差为1的分布,适用于许多机器学习算法。而归一化则是将特征缩放到[0, 1]范围内。
from sklearn.preprocessing import StandardScaler, MinMaxScaler scaler = StandardScaler() X_standardized = scaler.fit_transform(X) min_max_scaler = MinMaxScaler() X_normalized = min_max_scaler.fit_transform(X) -
对数变换: 对于正偏态分布的特征,进行对数变换可以使分布更接近于正态分布,这样有助于一些模型的性能。
df['log_feature'] = np.log(df['original_feature'] + 1) -
编码分类特征: 对于类别型特征,可以使用独热编码(One-Hot Encoding)或标签编码(Label Encoding)将其转换为数值格式,使得模型可以处理。
df = pd.get_dummies(df, columns=['categorical_feature'], drop_first=True)
案例分析
假设我们正在开发一个关于房价预测的模型,数据集中包含了房子的面积、房间数、房屋类型等特征。
首先,我们可以进行特征生成,创建一个新的特征“每平方价格”:
df['price_per_sqft'] = df['price'] / df['area']
然后,可以使用对数变换来处理价格特征:
df['log_price'] = np.log(df['price'] + 1)
最后,对于类别特征“房屋类型”,我们可以使用独热编码进行转换:
df = pd.get_dummies(df, columns=['housing_type'], drop_first=True)
经过这些特征生成与转换后,特征矩阵将更适合用于训练模型。
读到这里,可以把《特征工程自动化之特征生成与转换》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。
读完《特征工程自动化之特征生成与转换》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。
小结
特征生成与转换是特征工程中的重要组成部分,通过选择合适的生成与转换方法,可以显著提升模型的表现。在下一篇中,我们将介绍如何利用工具来实现特征工程的自动化,进一步简化机器学习工作流程。
学习《特征工程自动化之特征生成与转换》不必一口气吃完所有细节。先挑一个能动手验证的小问题,再顺着图和正文补齐概念。
继续阅读