机器学习——数据预处理(Preprocessing)

本文详细介绍了机器学习中的数据预处理步骤,包括去除唯一属性、缺失值处理、异常值识别与处理、属性编码、数据标准化、特征选择以及数据泄露问题。在数据预处理中,关键操作如填充缺失值、识别并处理异常值、属性编码转换以及特征选择对于构建高效模型至关重要。此外,还讨论了数据泄露可能导致模型过拟合的问题及其避免方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常我们获取到的初始数据通常具有缺失值,重复值,以及一些噪音数据等,需要在使用之前进行数据预处理。
数据预处理的常用流程为:去除唯一属性、缺失值处理、异常值处理、属性编码、数据标准化、特征选择、主成分分析。

1、去除唯一属性

唯一属性通常是一些id属性,这些属性并不能刻画样本自身的分布规律,所以简单地删除这些属性即可。

2、缺失值处理
  • 删除包含缺失值的一整列
    当该列种的大部分数据都缺失时可采用该方式,如果只有个别数据缺失,直接删除整列会导致大量信息丢失
  • 填充缺失值
    往缺失值中填入相关数据,例如:列均值、中位数、众数等
    填充值往往比直接删除整列数据有更好的效果
  • 扩展填充
    直接填充缺失值往往和实际的值之间有所差别,加入一列记录原始数据是否缺失可能会对预测结果有更好的效果
    在这里插入图片描述
3、异常值识别与处理

异常值是数据中常有的噪音,异常值又可以分为“真异常”和“假异常”。有时特定业务动作的变化会引发“真异常”,此时异常值反应的是真实情况,如果直接删除掉,可能就错失了信息。
识别异常值的方法:

  • 描述性统计法
    通过描述性统计的方法,可以获取到数据的极大值、极小值、均值、标准差等基本统计数据,然后根据常识判断出与基本认知不符的数据。
    例如:年龄的极大值为200,或者极小值为负数等,都属于异常数据
  • 3 σ 3\sigma 3σ方法
    对于符合正太分布或者近似符合正太分布的数据,99%的数值应该位于距离均
### Python 中用于机器学习数据预处理技术和常用库 #### 缺失值处理 在机器学习项目中,数据集经常存在缺失值。这些缺失值可能由多种因素引起,如测量错误或数据损坏等[^2]。为了有效应对这一挑战,可以采用不同的策略来填补这些空白。 一种常见的做法是利用`pandas`库提供的功能来进行前向填充(forward fill),即用前面最近的有效观测值替换当前的NA/NaN项: ```python import pandas as pd df = pd.DataFrame({'A': [1, 2, None], 'B': [None, 4, 5]}) filled_df = df.fillna(method='ffill') print(filled_df) ``` 另一种方法则是基于更复杂的模型预测缺失部分;例如,在时间序列分析里可能会选择线性插值法或是样条函数拟合等方式完成这项工作。对于离散型变量,则可考虑使用众数代替丢失的信息。 除了上述简单的方法外,还可以尝试Lagrange插值这样的高级技术。这种方法适用于连续数值属性,并能较好地保持原有趋势不变形。下面是一个具体的例子展示如何应用SciPy中的`interp1d`函数实现二次多项式的内插操作[^3]: ```python import numpy as np from scipy.interpolate import interp1d x = np.linspace(0, 10, num=11, endpoint=True) y = np.sin(x) # 设置一些人为制造出来的'缺失' y_missing = y.copy() y_missing[[3, 7]] = np.nan # 创建并调用interpolator对象 poly = interp1d(x, y_missing, kind="quadratic", bounds_error=False, fill_value="extrapolate") y_filled = poly(x) print("原始数组:", y) print("带有缺失值的数组:", y_missing) print("经过Lagrange插值后的结果:", y_filled) ``` #### 特征缩放与标准化 当准备训练样本时,确保各个维度之间具有相似尺度非常重要。如果不这样做的话,那些量级较大的特性将会主导距离度量的结果,从而影响最终性能表现。为此,通常会引入两种变换手段——最小最大规范化(`MinMaxScaler`)以及Z-score标准化(`StandardScaler`)。前者将所有特征重新映射到[0,1]区间范围内;后者则使得每列均值变为零且方差等于一。 以下是具体的应用实例说明这两种转换器的作用效果: ```python from sklearn.preprocessing import MinMaxScaler, StandardScaler scaler_minmax = MinMaxScaler(feature_range=(0, 1)) scaled_data_mm = scaler_minmax.fit_transform(data) scaler_std = StandardScaler(with_mean=True, with_std=True) scaled_data_zs = scaler_std.fit_transform(data) ``` #### 类别编码 许多算法无法直接接受字符串类型的输入作为分类标签。因此,在构建监督式学习框架之前,有必要先对这类非结构化信息实施某种形式上的数字化表示。最简单的方案莫过于独热编码(one-hot encoding),它能够有效地防止因序号赋予带来的潜在偏见问题。除此之外还有目标编码(target encoding)、频率编码(count/frequency encoding)等多种可供选择的方式。 这里给出一段代码片段用来演示怎样借助Pandas快速执行one-hot编码过程: ```python encoded_features = pd.get_dummies(df[['categorical_feature']]) final_dataset = pd.concat([original_numeric_columns, encoded_features], axis=1) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值