1.构造基础特征

星博讯 AI基础认知 1

特征工程是机器学习的核心环节,其本质是通过数据转换和创造来提升模型性能,下图清晰地展示了特征工程在机器学习流程中的位置:

1.构造基础特征-第1张图片-星博讯网络科技知识-SEO优化技巧|AI知识科普|互联网行业干货大全

flowchart TD
    A[原始数据] --> B[数据清洗]
    B --> C[特征工程<br>(本环节核心)]
    C --> D[模型训练]
    D --> E[模型评估]
    E -- 性能不佳 --> C
    E -- 性能达标 --> F[模型部署]

上图表明,特征工程并非一次性的步骤,而是一个与模型评估紧密互动的迭代优化过程,下面我们系统性地介绍其关键知识。

核心理念

目的:将原始数据转化为更能代表业务本质、更便于模型理解的特征。 核心思想:好的特征 > 复杂的模型(一个简单模型配上优秀特征,常能击败复杂模型配上普通特征)。

类比理解: 想象你是一名咖啡品鉴师,原始数据是“咖啡豆”,特征工程就是:

  • 挑选优质豆(选择相关特征)
  • 烘焙研磨(转换数据)
  • 调配比例(组合特征)
  • 最终得到一杯层次分明的咖啡(高质量特征集)

主要技术方法

数据清洗

  • 处理缺失值
    • 删除:缺失率过高(如>70%)的列/行
    • 填充:均值/中位数/众数/模型预测值
    • 标记:添加“是否缺失”标志位
  • 处理异常值
    • 识别:3σ原则、箱线图、业务规则
    • 处理:截断、缩尾、视为缺失值

特征变换

  • 标准化(适合有界数据、算法假设数据正态分布时)
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
  • 归一化(适合无界数据、需要统一量纲)
    from sklearn.preprocessing import MinMaxScaler
    scaler = MinMaxScaler()
    X_normalized = scaler.fit_transform(X)
  • 非线性变换:对数、平方根、Box-Cox变换(处理偏态分布)
  • 连续变量分箱:等宽、等频、基于模型(提高稳定性并捕捉非线性关系)

特征编码

  • 分类变量编码
    • 独热编码(类别少且无序)
    • 标签编码(有序类别)
    • 目标编码(用目标变量均值编码,需防过拟合)
  • 文本特征
    • 词袋模型
    • TF-IDF
    • 词向量(Word2Vec)

特征构造

  • 业务驱动的构造
    • 时间序列:滑动窗口统计量
    • 电商:客单价 = 总消费 / 订单数
    • 地理位置:计算距离核心区域的距离
  • 多项式特征:捕捉交互作用(注意维度爆炸)
  • 分解特征:如从日期拆解年、月、周几、是否节假日

特征选择

  • 过滤法:基于统计指标(相关系数、卡方检验、互信息)
  • 包裹法:递归特征消除(RFE)、前向/后向选择
  • 嵌入法:基于模型的特征重要性(L1正则化、树模型重要性)

实用案例演示

案例:客户流失预测

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, OneHotEncoder
df['tenure_month'] = df['tenure'] * 30  # 将年转换为月
df['avg_monthly_charges'] = df['total_charges'] / df['tenure_month'].replace(0, 1)
# 2. 交互特征
df['value_score'] = df['avg_monthly_charges'] * df['tenure_month']
# 3. 时间特征分解(如果有日期)
df['signup_year'] = df['signup_date'].dt.year
df['signup_month'] = df['signup_date'].dt.month
df['is_quarter_end'] = df['signup_date'].dt.month.isin([3, 6, 9, 12])
# 4. 分箱处理年龄
df['age_group'] = pd.cut(df['age'], 
                         bins=[0, 30, 50, 100], 
                         labels=['young', 'middle', 'senior'])
# 5. 编码分类变量
encoder = OneHotEncoder(sparse=False, drop='first')
encoded_features = encoder.fit_transform(df[['age_group']])

最佳实践与常见陷阱

✅ 最佳实践

  1. 理解业务:与领域专家沟通,创造有业务意义的特征
  2. 迭代开发:小步快跑,逐步增加特征并评估效果
  3. 验证策略:使用与模型评估相同的交叉验证策略
  4. 监控特征:记录特征来源、计算逻辑和版本
  5. 自动化管道:使用sklearn.pipeline确保一致性

❌ 常见陷阱

  1. 数据泄露:使用未来信息或目标信息编码训练集
  2. 过度工程:创造过多特征导致过拟合
  3. 忽略特征重要性:定期检查并剔除无用特征
  4. 测试集污染:在完整数据集上做标准化/编码
  5. 无视稀疏性:独热编码产生的高维稀疏问题

学习路径建议

  1. 入门阶段:掌握pandas数据操作 + sklearn预处理
  2. 中级阶段:学习特征选择方法 + 业务特征构造
  3. 高级阶段:自动化特征工程、深度学习特征提取

实用工具推荐

  • Python库pandas, numpy, scikit-learn, featuretools
  • 可视化matplotlib, seaborn(用于特征分析)
  • 自动化TPOT, AutoGluon(含自动化特征工程)

关键要点

特征工程是艺术与科学的结合:既需要技术方法的掌握,也需要对业务逻辑的深刻理解,最好的学习方式是:

  1. 掌握基本原理
  2. 在真实项目中实践
  3. 分析优秀案例(如Kaggle竞赛方案)
  4. 不断迭代优化

特征工程的质量直接决定了模型性能的上限,而模型算法只是不断逼近这个上限,从简单有效的特征开始,通过迭代逐步优化,这才是特征工程的正确打开方式。

标签: 构造 基础特征

抱歉,评论功能暂时关闭!

微信咨询Xboxun188
QQ:1320815949
在线时间
10:00 ~ 2:00