以下是机器学习数据预处理技术的详细总结,内容涵盖缺失值处理、数据标准化、特征编码和数据二值化等核心方法。
机器学习数据预处理技术总结
一、缺失值处理
1.1 Pandas处理方法
检测缺失值
-
isnull()函数:判断各个单元格是否为空值 -
需要配合
na_values参数识别多种缺失值表示形式(如"n/a", "na", "--"等)
处理缺失值
-
dropna():删除包含空字段的行-
参数说明:
-
axis:默认为0,逢空值剔除整行 -
how:'any'有一个数据为空就去掉整行;'all'所有数据都为空才去掉整行 -
thresh:设置需要多少非空值的数据才保留 -
subset:设置要检查的列 -
inplace:是否修改源数据
-
-
-
fillna():用指定内容替换空字段-
可替换为固定值(如666)
-
可使用统计量:
mean()均值替换、median()中位数替换
-
1.2 Scikit-learn处理方法
SimpleImputer类提供多种填补策略:
from sklearn.impute import SimpleImputer
-
均值填补 :
strategy="mean" -
中位数填补 :
strategy="median" -
常数填补 :
strategy="constant",配合fill_value参数 -
众数填补 :
strategy="most_frequent",适用于分类特征
二、数据标准化
2.1 标准化的重要性
-
调整特征数据分布为标准正态分布(均值为0,方差为1)
-
防止方差过大的特征主导目标函数
-
消除不同特征量纲影响,确保数据可比性
2.2 无量纲化处理
-
中心化:让所有记录减去固定值,平移数据位置
-
缩放处理:除以固定值将数据固定在特定范围
2.3 常用标准化方法
MinMaxScaler(最大最小值标准化)
-
将数据缩放到指定范围(默认[0,1])
-
可通过
feature_range参数自定义范围 -
公式:
(x - min)/(max - min)
StandardScaler(Z值标准化)
-
基于均值和标准差:
(x - μ)/σ -
保留数据原始分布关系
-
处理后均值为0,标准差为1
三、特征编码
3.1 特征类型分类
-
名义变量:数值相互独立(如性别:男、女)
-
有序变量:数值有顺序但不能计算(如学历:小学、初中、高中)
-
有距变量:数值有联系且可计算(如分数:100、90、60)
3.2 编码方法
独热编码(OneHotEncoder)
-
用N位状态位对N个可能取值编码
-
示例:血型编码为4维稀疏向量
-
优点:消除数值大小关系影响
序号编码(OrdinalEncoder)
-
处理类别间具有大小关系的数据
-
示例:高→3、中→2、低→1
-
保留大小顺序关系
目标标签编码(LabelEncoder)
-
使用0到n_classes-1之间的值编码
-
缺点:数值无实际含义,可解释性差
-
适用场景有限
四、数据二值化
4.1 二值化处理
-
根据数值是否大于阈值将数据分为两类(0或1)
-
Binarizer类实现:threshold参数设置阈值 -
应用场景:年龄分类、成绩等级划分等
4.2 应用示例
from sklearn.preprocessing import Binarizer
transformer = Binarizer(threshold=30).fit_transform(X)
将年龄大于30的编码为1,否则为0
五、其他预处理技术
5.1 常用预处理函数汇总
| 函数 | 功能 |
|---|---|
preprocessing.MaxAbsScaler() |
绝对值最大标准化 |
preprocessing.RobustScaler() |
带离群值数据集标准化 |
preprocessing.QuantileTransformer() |
使用分位数信息变换特征 |
preprocessing.PowerTransformer() |
使用幂变换执行到正态分布的映射 |
preprocessing.Normalizer() |
正则化 |
preprocessing.KBinsDiscretizer() |
将连续数据离散化 |
5.2 综合应用建议
-
数据清洗优先处理缺失值和异常值
-
特征工程根据特征类型选择合适的编码方式
-
标准化处理提升模型收敛速度和性能
-
方法选择需结合具体数据和业务场景
总结
数据预处理是机器学习流程中的关键环节,直接影响模型效果。通过系统的缺失值处理、标准化、特征编码和二值化等方法,能够将原始数据转化为适合机器学习模型处理的格式,为后续建模分析奠定坚实基础。