Scikit-learn 预处理函数分类详解
数据标准化类函数
preprocessing.scale()
- 功能:对数据进行标准化处理
- 原理:将数据转换为均值为 0、标准差为 1 的分布
- 特点:直接对输入数据进行转换,返回标准化后的数组
- 适用场景:快速标准化单个数据集
preprocessing.MinMaxScaler()
- 功能:最大最小值标准化
- 原理:将数据缩放到 [0,1] 区间,公式为\(X_{scaled} = \frac{X - X_{min}}{X_{max} - X_{min}}\)
- 特点:可通过
feature_range
参数指定缩放范围(如 [5,10]) - 适用场景:需要将数据映射到特定范围的场景
preprocessing.StandardScaler()
- 功能:Z 值标准化
- 原理:基于均值和标准差转换,公式为\(X_{scaled} = \frac{X - \mu}{\sigma}\)
- 特点:转换后数据均值为 0,方差为 1,保留原始数据分布特征
- 适用场景:大多数机器学习算法,特别是基于距离的算法
preprocessing.MaxAbsScaler()
- 功能:绝对值最大标准化
- 原理:通过除以每个特征的最大值将数据缩放至 [-1,1] 区间
- 特点:不移动数据(不破坏稀疏性),适合稀疏数据
- 适用场景:存在大量零值的稀疏数据
preprocessing.RobustScaler()
- 功能:带离群值数据集的标准化
- 原理:使用中位数和四分位范围进行缩放,对异常值不敏感
- 特点:不受异常值影响,比 StandardScaler 更稳健
- 适用场景:含有离群值的数据
数据转换类函数
preprocessing.QuantileTransformer()
- 功能:使用分位数信息变换特征
- 原理:将数据映射到均匀分布或正态分布
- 特点:对异常值具有鲁棒性,可将不同分布的数据转换为相同分布
- 适用场景:需要将数据转换为特定分布的情况
preprocessing.PowerTransformer()
- 功能:通过幂变换映射到正态分布
- 原理:应用幂函数将数据转换为更接近正态分布的形式
- 特点:提供 Box-Cox 和 Yeo-Johnson 两种变换方法
- 适用场景:非正态分布数据需要转换为正态分布时
preprocessing.Normalizer()
- 功能:数据正则化
- 原理:将每个样本缩放至单位范数(L1、L2 或最大范数)
- 特点:对每个样本单独处理,不考虑特征间的缩放
- 适用场景:文本分类、聚类等需要样本间比较的场景
特征编码类函数
preprocessing.OrdinalEncoder()
- 功能:将分类特征转换为有序数值
- 原理:为每个类别分配一个整数,保留类别间的顺序关系
- 特点:适用于有序分类特征(如学历:小学 < 初中 < 高中)
- 注意:会引入类别间的大小关系,可能影响模型
preprocessing.LabelEncoder()
- 功能:将分类目标值转换为数值
- 原理:将目标变量的每个类别映射到 0 到 n_classes-1 的整数
- 特点:仅用于目标变量 y,不用于输入特征 X
- 适用场景:分类问题中对目标变量的编码
preprocessing.MultiLabelBinarizer()
- 功能:多标签数据二值化
- 原理:将每个样本的多个标签转换为二进制数组
- 特点:支持样本同时属于多个类别的情况
- 适用场景:多标签分类问题
preprocessing.OneHotEncoder()
- 功能:独热编码
- 原理:将 N 个类别转换为 N 维稀疏向量,每个类别对应一个维度
- 特点:消除类别间的大小关系,增加特征维度
- 适用场景:名义变量(无顺序关系的分类特征)
其他预处理函数
preprocessing.KBinsDiscretizer()
- 功能:连续数据离散化
- 原理:将连续特征划分为 k 个离散区间
- 特点:提供均匀、 quantile 和 k-means 三种分箱策略
- 适用场景:需要将连续特征转换为分类特征时
preprocessing.FunctionTransformer()
- 功能:自定义特征处理函数
- 原理:将用户定义的函数应用于特征转换
- 特点:灵活性高,可实现任意自定义转换逻辑
- 适用场景:需要特殊数据转换时
preprocessing.Binarizer()
- 功能:特征二值化
- 原理:根据阈值将数值特征转换为 0 或 1
- 特点:可通过
threshold
参数设置阈值 - 适用场景:需要将特征简化为二元值的情况
preprocessing.PolynomialFeatures()
- 功能:创建多项式特征
- 原理:生成特征的多项式组合和交互项
- 特点:可通过
degree
参数指定多项式阶数 - 适用场景:捕捉特征间的非线性关系和交互效应
preprocessing.Imputer()
- 功能:缺失值填补
- 原理:使用统计量(均值、中位数、众数等)填充缺失值
- 特点:支持多种填充策略,处理数据中的缺失值
- 适用场景:数据预处理阶段处理缺失值