机器学习数据预处理:特征构造

机器学习数据预处理:特征构造(超通俗完整版)

特征构造 = 用原始数据"造"出更有用的新特征,是数据挖掘、竞赛上分、论文实验的核心技能,本科/研究生一看就懂、一学就会。


一、什么是特征构造?为什么必须做?

一句话理解

从已有的特征里加工、组合、提取、变换 ,创造出模型更容易学习的新特征

举个最简单的例子

  • 原始特征:身高、体重
  • 构造特征:BMI = 体重 / 身高²
    → 比单独身高、体重更能预测健康/体重等级

为什么要做特征构造?

  1. 原始信息太"粗",模型学不到深层规律
  2. 提升模型精度,简单模型也能拟合复杂关系
  3. 注入业务知识,让模型更贴合实际场景
  4. 小样本也能变强,不用堆数据也能提效果

二、最常用的 6 大类特征构造方法(全是干货)

1. 特征组合(交互项)

把两个或多个特征相乘/相除/加减 ,捕捉联合影响

  • 例子:房间数 × 低收入比例、面积 × 楼层
  • 公式:x1 × x2
  • 作用:让线性模型也能学非线性关系

2. 多项式特征(升维)

对特征做平方、立方、交叉项,扩展表达能力。

  • 例子:RMRM²RM×LSTAT
  • 工具:PolynomialFeatures
  • 适用:线性回归、逻辑回归、SVM

3. 函数变换(非线性构造)

用数学函数把特征变得更"规整"。

  • 对数:log(x) → 处理偏态数据(价格、收入)
  • 倒数:1/x → 强化距离、浓度类差异
  • 根号:sqrt(x) → 缓和极端值
  • 三角函数:sin / cos → 处理时间周期

4. 时间特征提取(超级常用)

从时间戳里拆出有用信息:

  • 年/月/日/小时/星期
  • 是否周末、是否月初、是否节假日
  • 时间差:距今多少天、间隔时长

5. 分桶/分箱(连续→离散)

把连续数字变成等级类别,降低噪声、增强鲁棒性。

  • 等宽分箱、等频分箱、业务分箱
  • 例子:年龄 → 青年/中年/老年;收入 → 低/中/高

6. 统计聚合特征(多表必用)

按用户/物品/地区分组,计算统计量:

  • 均值、总和、最大值、最小值、标准差
  • 近7天均值、近30天总和、波动程度
  • 适用:用户行为数据、订单数据、时序数据

三、特征构造的标准流程(背下来直接用)

  1. 理解数据与业务:知道每个字段含义、目标是什么
  2. 观察相关性:看哪些特征和目标关系强
  3. 设计新特征:组合、变换、提取、分桶
  4. 构造特征:代码实现
  5. 检验有效性:看相关性、特征重要度、模型分数
  6. 去冗余:去掉没用、重复、噪声特征

四、完整实战代码(波士顿房价预测)

包含:多项式构造、函数变换、特征重要性、模型对比,直接复制可运行

python 复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.linear_model import LinearRegression, RidgeCV
from sklearn.metrics import mean_squared_error, r2_score

import warnings
warnings.filterwarnings('ignore')

# ======================
# 1. 加载数据
# ======================
boston = load_boston()
data = pd.DataFrame(boston.data, columns=boston.feature_names)
data['MEDV'] = boston.target  # 房价(目标)
print("数据形状:", data.shape)
print(data.head())

# ======================
# 2. 查看相关性(找构造思路)
# ======================
plt.figure(figsize=(14, 8))
sns.heatmap(data.corr(), annot=True, cmap='Reds', fmt='.2f')
plt.title('特征相关性热力图')
plt.show()

# ======================
# 3. 特征构造 1:多项式交互特征
# ======================
key_feats = ['RM', 'LSTAT', 'PTRATIO']
X = data[key_feats]
y = data['MEDV']

# 二阶多项式扩展
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X)
feat_names = poly.get_feature_names_out(key_feats)
X_poly_df = pd.DataFrame(X_poly, columns=feat_names)

print("构造后特征:")
print(feat_names)

# ======================
# 4. 特征构造 2:函数变换特征
# ======================
data['LOG_CRIM'] = np.log1p(data['CRIM'])        # 对数
data['SQRT_TAX'] = np.sqrt(data['TAX'])          # 根号
data['DIS_INV'] = 1.0 / (data['DIS'] + 1e-6)     # 倒数

# ======================
# 5. 特征重要性可视化
# ======================
scaler = StandardScaler()
X_std = scaler.fit_transform(X_poly_df)

model = LinearRegression()
model.fit(X_std, y)

imp = pd.Series(model.coef_, index=feat_names).sort_values()
plt.figure(figsize=(12, 6))
imp.plot(kind='barh', color='purple')
plt.title('构造特征重要性')
plt.grid(True)
plt.show()

# ======================
# 6. 模型训练与评估
# ======================
X_train, X_test, y_train, y_test = train_test_split(
    X_poly_df, y, test_size=0.2, random_state=42
)

# 岭回归
ridge = RidgeCV(alphas=np.logspace(-3, 3, 50), cv=5)
ridge.fit(X_train, y_train)
y_pred = ridge.predict(X_test)

mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"MSE: {mse:.2f}")
print(f"R²: {r2:.4f}")

# ======================
# 7. 预测结果可视化
# ======================
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.7, color='blue')
plt.plot([0, 50], [0, 50], 'r--', lw=2)
plt.xlabel('真实房价')
plt.ylabel('预测房价')
plt.title('真实 vs 预测')
plt.grid()
plt.show()

五、特征构造的优点 & 缺点

优点

  1. 大幅提升模型效果:线性模型 R² 可从 0.6 → 0.8+
  2. 小样本神器:数据少也能明显提分
  3. 可解释性极强:新特征含义清晰
  4. 融入业务知识:比纯黑盒模型更可靠

缺点

  1. 依赖经验:新手不容易想到好特征
  2. 容易维度爆炸:多项式会疯狂增加特征数
  3. 可能引入冗余/噪声:需要配合特征选择

六、特征构造 vs 特征选择 vs 数据转换(一张表看懂)

方法 作用 一句话
特征构造 造新特征 从0到1,创造更强特征
特征选择 挑好特征 从多到少,保留关键特征
数据转换 改特征格式 缩放、编码、分桶、变换
PCA降维 压缩特征 把高维变低维,丢语义

七、什么时候最适合做特征构造?

  • 线性模型、LR、SVM 时 → 必须构造非线性特征
  • 数据量小、维度低 → 特征构造收益最大
  • 竞赛/科研提分 → 核心上分手段
  • 需要高可解释性 → 金融、医疗、政务场景
  • 时序/表格数据 → 时间特征+聚合特征必做

八、总结(面试/笔记万能版)

  1. 特征构造 = 用原始数据加工更强特征
  2. 6大方法:组合、多项式、函数变换、时间提取、分箱、统计聚合
  3. 线性模型 + 特征构造 = 低成本非线性拟合
  4. 构造 → 选择 → 训练 是数据建模黄金流程
  5. 好特征 > 好模型,是机器学习最朴素的真理
相关推荐
xiaotao1312 小时前
03-深度学习基础:指令微调与RLHF
人工智能·深度学习·大模型·指令微调
xiaohuoji1292 小时前
量化交易系统架构设计:从回测到实盘的4层分层方案(附架构图)
大数据·人工智能·数据挖掘·数据分析·个人开发·设计规范
棋子入局2 小时前
C语言实现消消乐游戏(6)
c语言·算法·游戏
Constantine372 小时前
最强生图模型GPT-image-2正式上线!附教程
人工智能·gpt
MaoziShan2 小时前
CMU Subword Modeling | 23 Syllables and Syllabification
前端·人工智能·机器学习·语言模型·自然语言处理·中文分词
程序员柒叔2 小时前
Agent / Subagent / Swarm 解析:ClaudeCode源码深度解读
人工智能·后端
AI浩2 小时前
PF-RPN:无需提示的通用区域提议网络
人工智能
blxr_2 小时前
深入Spring AI RAG:揭秘RetrievalAugmentationAdvisor的过滤器机制
人工智能·spring