一文搞懂机器学习中的特征构造!

推荐直接网站在线阅读:aicoting AI算法面试学习在线网站

什么是特征构造?

特征构造是 通过已有的原始特征生成新的、更具信息量的特征 的过程。它是特征工程中提升模型性能的重要手段。

  • 目标:
  • 增强特征的表达能力,使模型更容易捕捉数据的潜在规律;
  • 提升模型的预测准确性和泛化能力;
  • 简化模型复杂度,通过高信息量的特征减少需要的模型参数。 举例:
  • 原始特征:身高(Height) 和 体重(Weight)
  • 构造特征: B M I = W e i g h t / H e i g h t 2 BMI = Weight / Height^2 BMI=Weight/Height2,直接反映身体健康状态,比单独使用身高或体重更有预测价值。

特征构造的方法

1.数值特征变换

通过数学运算或函数映射增强特征信息。

常见方法

  • 多项式特征(Polynomial Features):增加特征的高次幂及交互项 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 x1,x2→x12,x22,x1x2
  • 对数/指数变换:对偏态分布进行平滑 x ′ = log ⁡ ( x + 1 ) , x ′ = exp ⁡ ( x ) x' = \log(x + 1), \quad x' = \exp(x) 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.类别特征编码与构造

对于类别特征,直接用原始编码可能无法被模型理解,需要构造数值特征。

常用方法

  1. 独热编码(One-Hot Encoding)
  2. 目标编码(Target Encoding):类别与目标变量的均值映射
  3. 频率编码:类别出现频率作为特征值
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更新,别忘记关注哦!!!

相关推荐
西安邮电大学3 分钟前
贪心算法详细讲解
java·后端·其他·算法·面试
开源Z3 分钟前
LeetCode 135 · 分发糖果:两次扫描,先左后右取最大
算法·leetcode
装不满的克莱因瓶42 分钟前
掌握生成对抗网络(GAN)的优化目标与评估指标——从博弈函数到生成质量衡量体系
人工智能·python·深度学习·算法·机器学习
技术小黑1 小时前
CNN算法实战系列06 | InceptionV1实现猴痘病识别
深度学习·算法·cnn·inceptionv1
云淡风轻~窗明几净1 小时前
角谷猜想的任意算法测试
数据结构·人工智能·算法
happygrilclh1 小时前
赚外快了:等离子表面处理机电源算法需求说明
算法
ji198594431 小时前
MATLAB 求散点曲线斜率
开发语言·算法·matlab
kaikaile19952 小时前
MATLAB 实现:Koch & Zhao 图像水印算法(DCT域)
开发语言·算法·matlab
QiLinkOS2 小时前
QiLink开源生态的三维重构:基于时间、空间与社会价值的底层规则创新白皮书
大数据·c++·人工智能·科技·算法·gitee·开源
牛肉在哪里2 小时前
ros2 从零开始28 监听广播C++
开发语言·c++·算法·机器人