【机器学习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的参数可以保证训练数据集和测试数据集具有相同的类别标签比例

相关文章
|
2天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
10 1
|
2天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
12 1
|
29天前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
37 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
11天前
|
机器学习/深度学习 数据采集 Python
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
42 1
|
11天前
|
机器学习/深度学习 数据采集 人工智能
浅谈机器学习,聊聊训练过程,就酱!
本故事讲的是关于机器学习的基本概念和训练过程。通过这个故事,你将对机器学习有一个直观的了解。随后,当你翻阅关于机器学习的书籍时,也许会有不同的感受。如果你有感觉到任督二脉被打通了,那我真是太高兴了。如果没有,我再努努力 ヘ(・_|
27 0
浅谈机器学习,聊聊训练过程,就酱!
|
1月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
1月前
|
机器学习/深度学习 算法 数据挖掘
机器学习入门(二):如何构建机器学习模型,机器学习的三要素,欠拟合,过拟合
机器学习入门(二):如何构建机器学习模型,机器学习的三要素,欠拟合,过拟合
|
2月前
|
存储 人工智能 并行计算
Pai-Megatron-Patch:围绕Megatron-Core打造大模型训练加速生态
Pai-Megatron-Patch(https://github.com/alibaba/Pai-Megatron-Patch)是阿里云人工智能平台PAI研发的围绕Nvidia MegatronLM的大模型开发配套工具,旨在帮助开发者快速上手大模型,完成大模型(LLM)相关的高效分布式训练,有监督指令微调,下游任务评估等大模型开发链路。最近一年来,我们持续打磨Pai-Megatron-Patch的性能和扩展功能,围绕Megatron-Core(以下简称MCore)进一步打造大模型训练加速技术生态,推出更多的的训练加速、显存优化特性。
|
2月前
|
机器学习/深度学习 Python
训练集、测试集与验证集:机器学习模型评估的基石
在机器学习中,数据集通常被划分为训练集、验证集和测试集,以评估模型性能并调整参数。训练集用于拟合模型,验证集用于调整超参数和防止过拟合,测试集则用于评估最终模型性能。本文详细介绍了这三个集合的作用,并通过代码示例展示了如何进行数据集的划分。合理的划分有助于提升模型的泛化能力。
|
1月前
|
机器学习/深度学习 算法
【机器学习】揭秘反向传播:深度学习中神经网络训练的奥秘
【机器学习】揭秘反向传播:深度学习中神经网络训练的奥秘
下一篇
无影云桌面