Skip to main content

5.5.1 特征工程路线图:让数据更容易被学习

特征工程是在让输入对模型更有用、更稳定、更安全。很多模型问题,其实是特征问题。

先看特征流

特征工程路线图

特征工程章节流程图

理解字段 -> 预处理 -> 构造 -> 选择 -> 封装成 Pipeline
步骤第一动作
理解列出数值、类别、文本、日期、目标列
预处理缩放、编码、填补缺失值
构造创建比例、计数、日期、交互特征
选择去掉无用或泄漏特征
Pipeline让预处理可复现

跑一个 Pipeline

创建 feature_first_loop.py,安装 pandasscikit-learn 后运行。

import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler

X = pd.DataFrame(
{
"age": [22, 35, 47, 52, 28, 41],
"city": ["A", "B", "A", "C", "B", "C"],
"visits": [2, 6, 5, 9, 3, 7],
}
)
y = [0, 1, 1, 1, 0, 1]

preprocess = ColumnTransformer(
transformers=[
("num", StandardScaler(), ["age", "visits"]),
("cat", OneHotEncoder(handle_unknown="ignore"), ["city"]),
]
)

pipe = Pipeline([("preprocess", preprocess), ("model", LogisticRegression())])
pipe.fit(X, y)

print("pipeline_steps:", list(pipe.named_steps))
print("training_accuracy:", round(pipe.score(X, y), 3))

预期输出:

pipeline_steps: ['preprocess', 'model']
training_accuracy: 1.0

这个数据太小,不能当真实评估。这里要学的是流程:预处理和模型应该一起走。

按这个顺序学

顺序阅读练什么
15.5.2 特征理解特征类型、目标列、泄漏风险
25.5.3 数据预处理缩放、编码、缺失值
35.5.4 特征构造比例、分箱、日期、交互
45.5.5 特征选择去噪声、去冗余、防泄漏
55.5.6 Pipeline可复现的预处理和训练

通过标准

能列出特征类型,构建一个预处理 Pipeline,并解释为什么在训练/测试流程外做预处理可能导致泄漏,就算通过。