【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值

简介: 【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值

💫数据预处理的重要性

数据预处理在数据分析和机器学习中起着非常重要的作用。它是数据分析和机器学习流程中的第一步,决定了后续分析和建模的质量和可靠性。
数据预处理包括数据清洗数据转换等步骤。

在数据清洗中,我们需要对数据的缺失值情况进行检验并用剔除法插值法等方法进行替换,同时,我们需要检验数据的异常值情况,并对异常值进行替换或者删除处理。有时候还需要对重复值进行处理等等,通过数据清洗,可以使得我们的数据更加干净和可靠。
在实际应用中,我们拿到的数据不一定都是数值型数据让我们可以直接上手分析,很多情况下,我们拿到的数据往往会以不同的形式和单位进行表示,
这时候就需要我们将数据转化为利于我们分析和建模的形式,比如利用独热编码解决标称特征列。例如,可以进行数值化标准化归一化离散化等操作,使得数据更加易于处理和比较。

综上所述,数据的预处理在数据分析和机器学习中起着非常重要的作用,它可以帮助我们提高数据分析和机器学习的效果。因此,在进行数据分析和机器学习之前,进行数据的预处理是非常必要和重要的。

💫处理缺失值

在我们拿到的表格数据中,表格中的空白或者占位符很常见。如果我们将表格数据的前几行打印,若有空缺值,输出端会显示出NaN(代表“非数字”)计算机一般无法处理这些缺失值。如果简单的忽略这些缺失值,会产生不可预知的后果。因此,在进一步分析之前,必须要想处理这些缺失值。

⭐️识别表格中的数据

在这篇文章中,我使用的数据是经典的葡萄酒数据进行预处理及分析。

首先我们导入数据。

import pandas as pd
file_path="D:\A_data\Data_wine数据\wine.xlsx"
df=pd.read_excel(file_path)
df

首先,我们可以看出该葡萄酒数据一共有178行,14列。在这14列中,第一列是类别(即葡萄酒有三种不同的类别,用数字0、1、2进行表示),2-14列都是葡萄酒的特征

⭐️计算每列缺失值的数量

使用isnull方法查找缺失值,其返回值为一个存有布尔值的DataFrame。使用sum方法可以计算出每一列包含缺失值的数量

df.isnull().sum()

可以看出在这个葡萄酒数据集中没有缺失值

⭐️删除含有缺失值的样本或特征

处理缺失值最简单的方法之一就是从数据集中完全删除缺失值对应的样本(行)或者特征(列)。

例如:

使用dropna方法删除所有包含缺失值的行:

df.dropna(axis=0)

将参数axis设置为1,可以删除包含缺失值的列

df.dropna(axis-1)

虽然删除缺失值的方法简单,但是有时候删除太多行使得样本数据大大减少,从而使得数据分析的结果变得不可靠。删除太多特征列将会丢失用于分类任务的辨别性信息。

⭐️填充缺失值

通常,我们最常用的方法就是插值法。即根据数据集中其他样本估计缺失数据的值。 常用的一种插值方法是均值插补,均值插补是使用整个特征列的均值替换缺失值。

可以调用Scikit-Learn中的SimpleImputer类实现均值插补,代码如下所示:

from sklearn.impute import SimpleImputer
import numpy as np
imr=SimpleImputer(missing values=np.nan,strategy='mean')
imr=imr.fit(df.values)
imputed_data=imr.transform(df.values)

strategy参数还可以设置为median(中位数)或者most_frequent(众数)。

还有一种实现缺失值插补的方法。可以使用pandasfillna方法实现缺失值插补。使用fillna方法时需要提供插补方法作为参数。

例如,使用pandas时可以命令在DataFrame对象中实现均值插补。

df.fillna(df.mean())

💫处理异常值

异常值,指的是样本中的一些数值明显偏离其余数值的样本点,所以也称为离群点。异常值分析就是要将这些离群点找出来,然后进行分析。

⭐️异常值的鉴别

箱型图很适合鉴别异常值,具体的判断标准是计算出数据中的最小估计值最大估计值。如果数据数据超过这一范围,说明该值可能为异常值。箱型图会自动标出此范围,异常值则用圆圈表示。

下面我们以葡萄酒数据为例,绘制出13个特征列的箱型图,观察有无异常值。

import matplotlib.pyplot as plt
fig = plt.figure(figsize = (8, 6))
# 绘制
scores = ['alcohol', 'malic_acid', 'ash','alcalinity_of_ash']
_df = df[scores]
_df.boxplot()

12a4e07f4ec8448dad146954453ce60b.png

scores = ['magnesium', 'total_phenols', 'flavanoids','nonflavanoid_phenols']
_df = df[scores]
_df.boxplot()

8aa69ee0f03a49a6b77a3364532a81a3.png

scores = ['proanthocyanins','color_intensity','hue','od280/od315_of_diluted_wines']
_df = df[scores]
_df.boxplot()

4b998cfc23ee4c809748ea3482a493c1.png

scores=['proline']
_df = df[scores]
_df.boxplot()

31dd40bd53fb40c6bf8b0f9b455a2ac2.png通过上面的箱型图,我们可以看出malic_acidashalcalinity_of_ashmagnesiumproanthocyaninscolor_intensityhue这些特征列含有异常值。

⭐️异常值的处理

如果有异常值的特征列比较少,且样本数量比较大时,我们可以考虑删除异常值。 如果异常值非常时,则可能需要进行填补设置,同处理缺失值一样,我们可以用平均值,中位数,众数等来填补。

可以将处理方法包装成一个函数,方便对含有异常值的列进行处理。

def box_outliers(data, fea, scale):
    Q1 = data[fea].quantile(0.25)
    Q3 = data[fea].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound=Q1-1.5*IQR
    upper_bound=Q1+1.5*IQR
    cond=(data[fea]<lower_bound)|(data[fea]>upper_bound)
    data[fea][cond]=data[fea].mean()
    return data

调用函数

box_outliers(df,'alcohol',1.5)

💫将数据集划分为训练数据集和测试数据集

使用Scikit-Learnmodel_selection子包中的tran_test_split函数将数据集随机划分为独立的训练数据集测试数据集

from sklearn.model_selection import train_test_split
X,y=df.iloc[:,1:].values,df.iloc[:,0].values
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=0,stratify=y)

分类标签y作为stratify的参数可以保证训练数据集和测试数据集具有相同的类别标签比例

相关文章
|
机器学习/深度学习 人工智能 JSON
【解决方案】DistilQwen2.5-R1蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
阿里云的人工智能平台 PAI,作为一站式的机器学习和深度学习平台,对DistilQwen2.5-R1模型系列提供了全面的技术支持。无论是开发者还是企业客户,都可以通过 PAI-ModelGallery 轻松实现 Qwen2.5 系列模型的训练、评测、压缩和快速部署。本文详细介绍在 PAI 平台使用 DistilQwen2.5-R1 蒸馏模型的全链路最佳实践。
|
人工智能 JSON 算法
【解决方案】DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen 系列是阿里云人工智能平台 PAI 推出的蒸馏语言模型系列,包括 DistilQwen2、DistilQwen2.5、DistilQwen2.5-R1 等。本文详细介绍DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践。
|
11月前
|
机器学习/深度学习 存储 运维
机器学习异常检测实战:用Isolation Forest快速构建无标签异常检测系统
本研究通过实验演示了异常标记如何逐步完善异常检测方案和主要分类模型在欺诈检测中的应用。实验结果表明,Isolation Forest作为一个强大的异常检测模型,无需显式建模正常模式即可有效工作,在处理未见风险事件方面具有显著优势。
940 46
|
人工智能 调度 芯片
PAI训练服务:云上大模型训练新篇章
本文介绍了通用AI时代下的新训练方法及PAI平台的优化。随着大模型时代的到来,算力需求激增,硬件和网络通信成为瓶颈。PAI平台通过自动容错、3D健康检测等技术确保训练稳定性;通过资源配额、智能调度等提高性价比;并推出PAI-TorchAcc和PAI-ChatLearn两大引擎,分别实现高效训练加速和灵活的对齐训练,显著提升训练性能与效果。这些改进解决了大规模AI训练中的关键问题,提升了效率和稳定性。
|
9月前
|
机器学习/深度学习 自然语言处理 算法
Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的对抗训练与鲁棒性提升(205)
本文探讨Java大数据与机器学习在自然语言处理中的对抗训练与鲁棒性提升,分析对抗攻击原理,结合Java技术构建对抗样本、优化训练策略,并通过智能客服等案例展示实际应用效果。
|
人工智能 自然语言处理 算法
MT-MegatronLM:国产训练框架逆袭!三合一并行+FP8黑科技,大模型训练效率暴涨200%
MT-MegatronLM 是摩尔线程推出的面向全功能 GPU 的开源混合并行训练框架,支持多种模型架构和高效混合并行训练,显著提升 GPU 集群的算力利用率。
1046 18
|
机器学习/深度学习 人工智能 边缘计算
DistilQwen2.5蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen2.5 是阿里云人工智能平台 PAI 推出的全新蒸馏大语言模型系列。通过黑盒化和白盒化蒸馏结合的自研蒸馏链路,DistilQwen2.5各个尺寸的模型在多个基准测试数据集上比原始 Qwen2.5 模型有明显效果提升。这一系列模型在移动设备、边缘计算等资源受限的环境中具有更高的性能,在较小参数规模下,显著降低了所需的计算资源和推理时长。阿里云的人工智能平台 PAI,作为一站式的机器学习和深度学习平台,对 DistilQwen2.5 模型系列提供了全面的技术支持。本文详细介绍在 PAI 平台使用 DistilQwen2.5 蒸馏小模型的全链路最佳实践。
|
机器学习/深度学习 人工智能
Diff-Instruct:指导任意生成模型训练的通用框架,无需额外训练数据即可提升生成质量
Diff-Instruct 是一种从预训练扩散模型中迁移知识的通用框架,通过最小化积分Kullback-Leibler散度,指导其他生成模型的训练,提升生成性能。
407 11
Diff-Instruct:指导任意生成模型训练的通用框架,无需额外训练数据即可提升生成质量
|
人工智能 JSON 算法
魔搭支持在阿里云人工智能平台PAI上进行模型训练、部署了!
现在,魔搭上的众多模型支持在阿里云人工智能平台PAI-Model Gallery上使用阿里云算力资源进行模型训练和部署啦!
1033 22
如何看PAI产品下训练(train)模型任务的费用细节
PAI产品下训练(train)模型任务的费用细节
303 6

热门文章

最新文章