一、学习背景与目的
在机器学习流程中,数据预处理是保障模型训练效果的关键环节。原始数据常存在缺失值、量纲不一致、特征格式不匹配等问题,直接影响模型对数据规律的学习。本次学习围绕 Pandas 与 Scikit-learn(sklearn)工具库,系统掌握数据预处理的核心技术,包括缺失值处理、数据标准化、特征编码及数据二值化,为后续机器学习建模奠定基础。
二、核心知识点总结
(一)缺失值处理
缺失值是数据集中常见问题,需先识别再通过删除或填充解决,核心工具包括 Pandas 内置函数与 sklearn 的SimpleImputer
。
1. 缺失值识别(Pandas)
- 关键函数:
isnull()
功能:判断数据框(DataFrame)或 Series 中每个单元格是否为空,返回布尔值(True
表示空值,False
表示非空值)。 注意事项:Pandas 默认仅识别NaN
为缺失值,需通过na_values
参数手动指定其他缺失值格式(如"n/a"
、"na"
、"-"
),确保识别全面性。 示例代码:python
运行
import pandas as pd missing_values = ["n/a", "na", "-"] df = pd.read_csv('property-data.csv', na_values=missing_values) print(df['NUM_BEDROOMS'].isnull()) # 查看该列空值情况
2. 缺失值处理方法
处理方式 | 工具 / 函数 | 核心逻辑 | 适用场景 |
---|---|---|---|
删除法 | Pandas dropna() | 删除包含空值的行 / 列,参数how="any" (有一个空值即删)、how="all" (全为空才删) | 数据量较大、空值占比低,且删除后不影响数据分布 |
填充法 - Pandas | fillna() | 用指定值(如常数666 )、均值(mean() )、中位数(median() )填充空值 | 数据量较小,需保留样本完整性 |
填充法 - sklearn | SimpleImputer | 支持 4 种策略: - strategy="mean" (均值填充,适用于正态分布数据) - strategy="median" (中位数填充,适用于含异常值数据) - strategy="constant" (常数填充,需指定fill_value ) - strategy="most_frequent" (众数填充,适用于分类数据) | 标准化处理流程,适配 sklearn 建模 pipeline |
(二)数据标准化
标准化旨在解决 “不同特征量纲不一致导致模型偏向方差大的特征” 问题,核心是将数据转换为统一规格(无量纲化),常用两种方法。
1. 核心概念
- 定义:将特征分布调整为特定形式(如标准正态分布),消除量纲影响,使不同特征具备可比性。
- 无量纲化类型:
- 中心化:数据平移(减去固定值,如均值);
- 缩放:数据压缩 / 扩张(除以固定值,如标准差、最大值)。
2. 常用标准化方法
方法 | 工具 / 函数 | 计算公式 | 特点 |
---|---|---|---|
最大最小值标准化 | preprocessing.MinMaxScaler() | \(X_{scaled} = \frac{X - X_{min}}{X_{max} - X_{min}}\) | 可通过feature_range 指定目标范围(默认[0,1] ),适用于需要固定数据范围的场景(如神经网络输入) |
Z 值标准化 | preprocessing.StandardScaler() | \(X_{scaled} = \frac{X - \mu}{\sigma}\)(\(\mu\)为均值,\(\sigma\)为标准差) | 转换后数据均值为 0、方差为 1,保留原始数据分布关系,适用于线性模型(如逻辑回归、SVM) |
(三)特征编码
将非数值型分类特征转换为数值型,根据特征类型(名义 / 有序 / 有距)选择不同编码方式。
1. 特征类型划分
- 名义变量:无顺序关系(如性别:男 / 女、血型:A/B/AB/O);
- 有序变量:有顺序但不可计算(如学历:小学 < 初中 < 高中);
- 有距变量:有顺序且可计算(如分数:100/90/60)。
2. 核心编码方法
编码方式 工具 / 函数 适用特征类型 原理与示例 独热编码 preprocessing.OneHotEncoder()
名义变量 用 N 位二进制向量表示 N 个类别(如血型 A→[1,0,0,0],B→[0,1,0,0]),避免引入虚假顺序关系 序号编码 preprocessing.OrdinalEncoder()
有序变量 将类别按顺序映射为整数(如学历:小学→1,初中→2,高中→3),保留原有顺序 目标标签编码 preprocessing.LabelEncoder()
目标变量(y) 将目标标签映射为 0~n_classes-1 的整数(如 “存活”→1,“死亡”→0),仅用于目标值,不用于输入特征(X) (四)数据二值化
- 定义:根据阈值将连续数据分为两类(0 或 1),实现 “非黑即白” 的简化表达。
- 工具 / 函数:
preprocessing.Binarizer()
核心参数:threshold
(阈值,大于阈值为 1,否则为 0)。
示例:将年龄二值化(阈值 30),年龄 > 30→1,年龄≤30→0:python
运行
from sklearn.preprocessing import Binarizer X = data.iloc[:,0].values.reshape(-1,1) # 年龄列 transformer = Binarizer(threshold=30).fit_transform(X)
三、关键工具函数速查表
工具库 函数 核心功能 Pandas isnull()
识别缺失值(布尔判断) Pandas dropna()
删除含空值的行 / 列 Pandas fillna()
填充缺失值(常数 / 均值 / 中位数) sklearn.preprocessing MinMaxScaler()
最大最小值标准化 sklearn.preprocessing StandardScaler()
Z 值标准化(均值 0、方差 1) sklearn.preprocessing OneHotEncoder()
名义变量独热编码 sklearn.preprocessing OrdinalEncoder()
有序变量序号编码 sklearn.preprocessing LabelEncoder()
目标标签编码 sklearn.preprocessing Binarizer()
数据二值化 sklearn.impute SimpleImputer()
标准化填充缺失值(均值 / 中位数 / 众数 / 常数) 四、学习总结与应用建议
- 流程优先级:数据预处理需遵循 “先识别缺失值→处理缺失值→标准化→特征编码” 的顺序,确保每一步输出符合下一步输入要求。
- 方法选择原则:
- 缺失值:数据量大用删除法,数据量小用填充法(正态分布用均值,异常值多用中位数,分类数据用众数);
- 标准化:线性模型用 Z 值标准化,神经网络用 MinMaxScaler;
- 编码:名义变量用独热编码,有序变量用序号编码,目标值用 LabelEncoder。
- 工具适配:Pandas 适合快速数据清洗(如缺失值初步处理),sklearn 适合标准化流程(便于与后续建模整合为 pipeline)。