数据清洗实战:提升机器学习模型准确性的核心技术

机器学习是一项重要的技术,但在应用之前,你的数据集需要先整理成特定的格式,才能用于其模型。

为实现这一目标,实际数据集通常需要经过一系列处理技术。

本文将以Haensel AMS面试中真实的数据项目为例,探讨这些数据处理方法。你将了解这些概念,并看到其在真实项目中的应用。让我们先从数据项目的细节开始,然后进入具体的数据清洗技术!

Essential Data Cleaning Techniques for Accurate Machine Learning Models


数据项目:价格预测

提升机器学习模型准确性的数据清洗技术

以下是该数据项目的链接,该项目被Haensel AMS用于数据科学岗位的招聘流程中。该居家作业要求候选人基于各类特征构建机器学习模型,预测价格。

数据集包含七个属性,价格(price)为目标列。其中特征loc1、para2和dow是从这些列中提取的关键特征。

本项目的目的是清洗数据并检查各特征之间的所有可能相关性,从而为机器学习模型提取出可读的信息。在本部分中,我们将任务扩展到缺失值处理、数据类型转换、异常值处理以及特征选择。

本数据集将展示我们在本文提及的每项数据清洗技术对模型质量的实际影响,从而提升模型的准确性。


缺失值处理

现实世界的数据集常常存在缺失值,这可能导致数据偏差或降低模型准确性。

处理缺失值有多种技术,例如直接删除、用均值、中位数或众数填充等。


数据集示例
在“价格预测”数据集中,我们将使用pandas的dropna()方法删除包含缺失值的行,以确保机器学习模型训练于完整数据之上。

在开始清洗之前,先检查数据集的结构并确定缺失值的数量。

import pandas as pd

df = pd.read_csv("sample.csv")

print(df.info())

输出如下。


处理缺失值的不同数据清洗技术

在本例中没有缺失值,但如果存在缺失值,可以采用以下方法删除这些行。

注意:我们有三列为对象类型(object),需在应用机器学习模型前先处理,这将在下一个步骤中进行。

# 删除缺失值所在的行
df.dropna(inplace=True)

处理缺失值的替代方法

但实际上我们有多种方法处理缺失值:

  • 用均值或中位数填充缺失值

    :对于数值型数据,可以用该列的均值或中位数(或某一常数)填充缺失项。

  • 用众数填充(针对分类数据)

    :对于像“dow”(星期几)这样的分类特征,可以用该列最常见的值填充缺失项。

  • 前向填充或后向填充

    :用前一行或后一行的值替换缺失项。

  • 高级插补技术

    :对于复杂缺失数据,可以使用K近邻(KNN)插补或Sklearn中的回归型均值/中位数/众数插补库。


数据类型转换

在许多数据集中,特征可能以数值型或分类型表示。通常,机器学习模型对数值型数据有更好的表现。

对于分类型变量,常用的方法是OneHot编码,它会为每一个类别值分配一个新的二进制列。作为替代,也可以将看似数字的字符串类型用pd.to_numeric()强制转为数值。

常见的数据预处理步骤之一是将分类变量(如星期几“dow”)转换为连续值,以便模型能理解。接下来,我们还需确保loc1和loc2等特征已为数值型,便于分析。


数据集示例
在“价格预测”数据集中,loc1和loc2列需转换为数值类型。此外,dow列(表示星期几)为分类变量,我们将用独热编码(OneHot Encoding)将其转为多个二进制列。

首先,查看数据的取值情况:

df["loc1"].value_counts()

输出如下。


数据类型转换的不同数据清洗技术

如上所示,需先移除“S”和“T”,因为机器学习模型需要数值型数据。代码如下:

df["loc2"] = pd.to_numeric(df["loc2"], errors='coerce')
df["loc1"] = pd.to_numeric(df["loc1"], errors='coerce')
df.dropna(inplace = True)

通过上述代码,我们已将两列(对象类型)转换为数值型。你可能还记得,还有一列需要转换:dow。这个留给你来实现。


数据类型转换的替代方法
  • 标签编码(Label Encoding)

    :将分类数据转换为唯一的整数。注意,这可能引入无意的顺序关系,通常不如独热编码常用。

  • 序数编码(Ordinal Encoding)

    :如果特征的类别有顺序(比如学历等级),可用序数编码按有意义的顺序分配数值。

  • 小贴士

    :可以这样将dow列转换为数字型。


异常值处理

异常值是极端的数据点,会影响你的机器学习模型。例如,预测人类身高时,10厘米或500厘米的值就属于异常。

当然,判断异常值的方法有很多。常见的是使用统计方法如四分位距(IQR),或根据领域知识设定阈值。


数据集示例
在“价格预测”数据集中,para1列含有一些极端值。我们将过滤掉para1大于10的行。

result = result[result["para1"] < 10]

但在这之前,绘制散点图矩阵来检查异常值是很好的方法。如果我们想进一步了解某一特征的数据分布,可用以下代码:

result["para1"].value_counts()

处理异常值的替代方法
  • 四分位距法(IQR)

    :计算第25和第75百分位数(IQR),任何落在IQR 1.5倍之外的值均为异常值。

  • Z分数法(Z-Score)

    :标准化数据,根据与均值的标准差距离判断异常,绝对值大于3的为异常值。

  • 截断法(Capping)

    :将异常值截断在特定百分位,而不是完全删除。


标准化

标准化指将特征以0为均值,1为方差进行居中处理。

这是因为许多机器学习模型在输入变量处于相似尺度时表现更佳。如果数据未标准化,数值范围最大的特征会主导学习过程。

标准化技术包括:
  • 最小-最大缩放(Min-Max Scaling)

    :将数据缩放到0到1之间。

  • 标准缩放(Z-score规范化)

    :将数据缩放为均值0、标准差1。

  • 稳健缩放(Robust Scaling)

    :基于IQR缩放,对异常值不敏感。


数据集示例
在“价格预测”数据集中,我们将对para1、para2、para3和para4等列应用三种不同的缩放技术,确保在输入模型前它们处于统一尺度。

以下是将特征缩放到0到1之间的代码(最小-最大缩放):

from sklearn.preprocessing import MinMaxScaler
df = pd.read_csv("sample.csv")
columns_to_scale = ['para1', 'para2', 'para3', 'para4']
scaler = MinMaxScaler()
df[columns_to_scale] = scaler.fit_transform(df[columns_to_scale])
print(df[columns_to_scale].head())

我们还会在本项目中应用标准缩放和稳健缩放,当然也有其他方法。


缩放的替代方法
  • MaxAbsScaler

    :将每个特征除以其最大绝对值,适用于已居中于零的数据。

  • 对数变换(Log Transformation)

    :非线性变换,可减少高度偏斜数据的偏态。


特征选择

特征选择是从所有特征中挑选出相关性高的部分来建模。它能降低数据集的维度,帮助建立更准确、不过拟合的模型。

常用方法包括:基于相关性的过滤法、递归特征消除(RFE)、树模型的特征重要性排序等。


数据集示例
在“价格预测”数据集中,我们将计算各特征与价格的相关系数,然后选择相关性最高的前三或前五个特征。以下是选择相关性最高的5个特征的代码:

five_best = []
df_5 = pd.DataFrame(result.corr()["price"]).sort_values(by = "price", ascending = False)
df_5 = df_5.drop(df_5.index[0]).head(5)
for i in range(len(df_5)):
    five_best.append(df_5.index[i])

通过选择最相关的3或5个特征,我们现在只保留更能预测目标变量的数据子集。


特征选择的替代方法
  • 递归特征消除(RFE)

    :逐步剔除最不重要的特征,并跟踪其重要性,得出最优子集。

  • 基于树模型的特征重要性

    :随机森林或梯度提升模型可根据特征对目标变量的预测重要性进行排序。

在清洗数据时,注意避免5大常见陷阱。


总结

本文探讨了最关键的数据清洗技术,从缺失值处理到标准化方法,并介绍了多种替代方案。

结合“价格预测”数据项目,我们将这些技术应用于一份真实的面试数据集,为你今后的面试做准备,同时让你掌握实用的数据清洗策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值