推荐直接网站在线阅读:aicoting AI算法面试学习在线网站
什么是特征构造?
特征构造是 通过已有的原始特征生成新的、更具信息量的特征 的过程。它是特征工程中提升模型性能的重要手段。
- 目标:
- 增强特征的表达能力,使模型更容易捕捉数据的潜在规律;
- 提升模型的预测准确性和泛化能力;
- 简化模型复杂度,通过高信息量的特征减少需要的模型参数。 举例:
- 原始特征:身高(Height) 和 体重(Weight)
- 构造特征: <math xmlns="http://www.w3.org/1998/Math/MathML"> B M I = W e i g h t / H e i g h t 2 BMI = Weight / Height^2 </math>BMI=Weight/Height2,直接反映身体健康状态,比单独使用身高或体重更有预测价值。
特征构造的方法
1.数值特征变换
通过数学运算或函数映射增强特征信息。
常见方法
- 多项式特征(Polynomial Features):增加特征的高次幂及交互项 <math xmlns="http://www.w3.org/1998/Math/MathML"> x 1 , x 2 → x 1 2 , x 2 2 , x 1 x 2 x_1, x_2 \rightarrow x_1^2, x_2^2, x_1 x_2 </math>x1,x2→x12,x22,x1x2
- 对数/指数变换:对偏态分布进行平滑 <math xmlns="http://www.w3.org/1998/Math/MathML"> x ′ = log ( x + 1 ) , x ′ = exp ( x ) x' = \log(x + 1), \quad x' = \exp(x) </math>x′=log(x+1),x′=exp(x)
- 标准化/归一化:统一尺度,提升模型收敛效率
python
import pandas as pd
from sklearn.preprocessing import PolynomialFeatures
# 构造数据
data = pd.DataFrame({'x1': [1,2,3], 'x2': [4,5,6]})
poly = PolynomialFeatures(degree=2, include_bias=False)
data_poly = poly.fit_transform(data)
print(data_poly)
输出特征包含原始特征、平方项和交互项。

2.类别特征编码与构造
对于类别特征,直接用原始编码可能无法被模型理解,需要构造数值特征。
常用方法
- 独热编码(One-Hot Encoding)
- 目标编码(Target Encoding):类别与目标变量的均值映射
- 频率编码:类别出现频率作为特征值
python
import pandas as pd
data = pd.DataFrame({'City': ['Beijing', 'Shanghai', 'Beijing', 'Shenzhen'],
'Sales': [200, 150, 300, 100]})
# 目标编码
target_mean = data.groupby('City')['Sales'].mean()
data['City_encoded'] = data['City'].map(target_mean)
print(data)
输出如下:
3.时间序列特征构造
针对时间数据,提取周期性或趋势性特征:
- 年、月、日、星期、季度
- 滑动窗口统计值(均值、最大值、最小值、标准差)
- 时间间隔特征:如两次事件间的天数
python
import pandas as pd
data = pd.DataFrame({'date': pd.date_range('2025-01-01', periods=4),
'sales':[100,150,200,130]})
data['day_of_week'] = data['date'].dt.dayofweek
data['month'] = data['date'].dt.month
print(data)
输出如下:

4.文本特征构造
文本特征可从原始文本中提取信息:
- 长度特征:字符数、词数
- 词频特征:TF-IDF
- 情感特征:正向/负向情感得分
- 词嵌入:Word2Vec、BERT 等
python
from sklearn.feature_extraction.text import CountVectorizer
texts = ["I love ML", "ML is fun"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts).toarray()
print(X)
输出如下:

5.特征组合与交互
通过组合不同特征生成新的信息,尤其在非线性问题中有效:
在构造特征的时候,要注意避免维度爆炸,尤其是多项式特征和交互特征,过多特征可能导致训练成本高、过拟合。同时构造特征应有实际意义,如 BMI、用户活跃天数等。
最新的文章都在公众号aicoting更新,别忘记关注哦!!!