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

推荐直接网站在线阅读: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更新,别忘记关注哦!!!

相关推荐
Tisfy16 小时前
LeetCode 3090.每个字符最多出现两次的最长子字符串:二重循环 / 滑动窗口
算法·leetcode·字符串·题解·模拟·双指针·滑动窗口
-dzk-16 小时前
【技巧】LC 136.只出现一次的数字
算法·异或
有点。17 小时前
C++二叉树二(练习题)
数据结构·c++·算法·图论
专注仿真17 小时前
问答大模型技术方案算法实现-RAPTOR树构建算法与BEG集成使用
python·算法
众人皆醒我独醉17 小时前
AI 工作负载可观测性:DCGM + Prometheus + Grafana
面试·llm·gpu
西门老铁17 小时前
JWT 是什么?三段式结构、签名原理与 6 个安全坑一次讲透
后端·面试
zlinear数据采集卡18 小时前
数据采集卡从入门到精通(10):采样率与分辨率的核心关系——反比律、架构分布与过采样
arm开发·嵌入式硬件·算法·fpga开发·架构·开源
gyx_这个杀手不太冷静18 小时前
高级前端开发职业规划(2026—2035)
前端·面试·agent
一只叫煤球的猫19 小时前
开个新坑,从头开始完整拆解 Spring AI 2.0 的源码
后端·面试·aigc
GeekZHR19 小时前
C语言指针进阶补充6:动态内存管理、mem系列内存函数、复杂指针声明,一次补齐指针的“三大盲区“
java·c语言·算法·指针