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

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

相关推荐
进击的明明12 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
zyl76514 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
爱读书的小胖18 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌18 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
OPEN-F18 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_3077791318 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
桃桃乌龙_19 小时前
LangGraph 深度解析:从链到图,把 Agent 的循环画出来
面试
tomwang032219 小时前
路径优化建模、优化算法分类及工程化小结
算法·数学建模·分类
小羊没烦恼!19 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
考研保研资料分享19 小时前
地信遥感保研至南京大学南赫:六场考核与跨专业失利复盘
面试