scikit-learn数据预处理模块

scikit-learn数据预处理模块


全文链接:scikit-learn数据预处理模块


引言

sklearn.preprocessing 提供将原始特征向量 转换为更适合下游估计器的表示的常用工具与 Transformer 类。许多算法(尤其线性模型、基于距离的模型)对特征尺度、分布形态 敏感;类别特征需先编码 ;连续特征有时需分箱非线性变换 以增强表达力。下文按官方用户指南 7.3 Preprocessing data 的结构做归纳,版本叙述以当前稳定文档(如 1.8)为准,细节以官方页为准。


1. 标准化与缩放(Standardization / Scaling)

1.1 标准化(去均值、单位方差)

StandardScaler :各列减训练集均值、除以标准差,使数据近似零均值、单位方差。SVM 的 RBF 核、线性模型的 L1/L2 等常隐含「特征量级可比」的假设;若某列方差远大于其他列,可能主导目标函数。可通过 with_mean=False / with_std=False 关闭居中或缩放。

Pipeline 要点 :在训练集上 fit,对测试集仅 transform,避免把测试信息泄露进缩放参数。

1.2 缩放到区间

  • MinMaxScaler :线性缩放到给定区间(常用 ([0,1])),公式为先按列 min-max 标准化再映射到 feature_range
  • MaxAbsScaler :按各列最大绝对值缩放,使训练数据落在 ([-1,1]) 附近,适合已近似中心化或稀疏数据(保留零结构)。

1.3 稀疏矩阵

对稀疏输入一般不要居中 (会破坏稀疏结构)。缩放稀疏数据推荐 MaxAbsScalerStandardScalerwith_mean=False 时可接受 scipy.sparseRobustScaler 不能在稀疏矩阵上 fit**(但可对稀疏 transform`)。

1.4 含离群点时的缩放

离群点多时,基于均值/方差的缩放不稳定,可用 RobustScaler 用更稳健的中心与尺度估计替代。

1.5 核矩阵中心化

KernelCenterer:对核 Gram 矩阵在特征空间做中心化(文档给出 (\tilde{K}) 与测试核矩阵的居中公式),用于核方法流水线。


2. 非线性变换

QuantileTransformer :基于分位数的单调变换,可把特征映射到指定分布(如均匀 ([0,1]) 或近似正态)。对异常值相对不敏感,但会扭曲特征间相关性与距离

PowerTransformer:Yeo-Johnson / Box-Cox 等,把数据推向近似高斯;Box-Cox 要求严格为正。默认可对输出再做零均值单位方差。


3. 归一化(Normalization)

normalize / Normalizer :按样本 将特征向量缩放到单位范数(l1l2max),常用于点积、核相似度、文本向量空间模型等。按样本操作fit 几乎无状态。


4. 类别特征编码

4.1 OrdinalEncoder

每列类别映射为整数 (0 \ldots n-1)。不能直接当作有序数值用于所有估计器 ------许多模型会误读顺序。默认可透传 np.nan;可用 encoded_missing_value 等为缺失指定整数码。

4.2 OneHotEncoder

每列 (k) 个类别展开为 (k) 个二元列(或 drop 后为 (k-1) 列以避免共线)。可指定 categorieshandle_unknown(如 ignoreinfrequent_if_exist)、drop='first' / drop='if_binary'。缺失可视为单独类别np.nanNone 可被区分为不同类别。

4.3 低频类别聚合

OneHotEncoderOrdinalEncoder 支持 min_frequencymax_categories:将出现次数过少的类别合并为「低频」桶,缓解高基数与稀疏。

4.4 TargetEncoder(目标编码)

给定类别下目标的条件均值 (经收缩)编码无序类别,适合高基数 场景(如邮编、地区),避免 One-hot 维度过大。二分类、多分类、连续目标在文档中均有闭式说明:编码为类内统计与全局目标统计 的凸组合,收缩系数 (\lambda_i) 与样本量及 smooth 有关;smooth="auto" 时为经验 Bayes 估计。

关键 :训练数据应使用 fit_transform(X_train, y_train) ------内部用 k 折交叉拟合 ,每折用其余折学编码,减轻标签泄露与下游过拟合;fit+transformfit_transform 在训练集上不等价fit 在全训练集上学习易泄露,不推荐 单独用于训练侧编码。transform(X_test) 使用 fit_transform 阶段在全训练数据 上最终学到的 encodings_。缺失为单独类别;未见类别用 target_mean_


5. 离散化(Discretization)

KBinsDiscretizer :将连续特征分入 k 个箱;策略可为 uniform(等宽)、quantile(等量)、kmeans。输出可再接 One-hot 等,为线性模型引入非线性

Binarizer :按阈值将数值二值化;与 KBinsDiscretizer 在 (k=2) 时概念相关。

也可用 FunctionTransformer 包装 pandas.cut 等自定义分箱。


6. 缺失值填充

具体工具在独立章节 Imputation of missing values (如 SimpleImputerIterativeImputer);预处理章仅作索引。


7. 多项式与样条特征

PolynomialFeatures :生成指定次数的多项式与交叉项;interaction_only=True 仅交互项。

SplineTransformer:B 样条基,按次数与结点为每列单独构造基函数(不产生特征间交互);低次数 + 结点控制可避免高次多项式的边界振荡等问题。


8. 自定义变换

FunctionTransformer :将任意可调用函数包装成 Transformer,便于在 Pipeline 中复用(如对数、pandas.cut 等)。可配置 inverse_funccheck_inverse 等。


9. 与 Pipeline 的配合

缩放、编码、分箱等应 fit 在训练子集transform 验证/测试 ,并写入同一 Pipeline ,保证复现与防泄露。官方示例常用 make_pipeline(StandardScaler(), LogisticRegression()) 等形式。


参考

相关推荐
方安乐21 小时前
python之向量、向量和、向量点积
开发语言·python·numpy
zh1570231 天前
JavaScript中WorkerThreads解决服务端计算瓶颈
jvm·数据库·python
生信碱移1 天前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
蜡台1 天前
Python包管理工具pip完全指南-----2
linux·windows·python
Mr.朱鹏1 天前
【Python 进阶 | 第四篇】Psycopg3 + Flask 实现 PostgreSQL CRUD 全流程:从连接池到RESTful接口
python·postgresql·flask·virtualenv·fastapi·pip·tornado
2401_871492851 天前
Vue.js监听器watch利用回调函数处理级联下拉框数据联动
jvm·数据库·python
FreakStudio1 天前
亲测可用!可本地部署的 MicroPython 开源仿真器
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
哥布林学者1 天前
深度学习进阶(十三)可变形卷积 DCN
机器学习·ai
SilentSamsara1 天前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python
zhoutongsheng1 天前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python