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

相关文章
|
13天前
|
机器学习/深度学习 数据采集 自然语言处理
构建高效机器学习模型的策略与实践
【4月更文挑战第30天】 在数据驱动的时代,机器学习(ML)作为一项核心技术,其应用范围和影响力日益扩大。然而,构建一个既高效又准确的机器学习模型并非易事。本文将探讨一系列实用的策略和技术,用于优化机器学习的工作流程,包括数据预处理、特征工程、模型选择、超参数调优以及模型评估等方面。通过这些策略,读者可以提升模型的性能,确保在实际应用中达到预期的准确度和效率。
|
1天前
|
机器学习/深度学习 传感器 算法
构建未来:基于机器学习的智能健康监测系统
【5月更文挑战第12天】 在数字医疗领域,智能健康监测系统的出现正在革新我们对健康管理和疾病预防的理解。本文将探讨一个基于机器学习技术的智能健康监测系统的设计与实现,它能够实时跟踪个体的健康指标并通过预测性分析提前警示潜在的健康问题。通过融合生物统计学、数据挖掘及模式识别等先进技术,该系统旨在为个人用户提供量身定制的健康建议,并为医疗专业人员提供决策支持。文章首先概述了系统框架和关键技术,随后详细讨论了机器学习模型的建立过程以及如何优化这些模型以提高预测的准确性。最后,我们通过实验结果验证了系统的有效性,并讨论了未来的发展方向。
|
2天前
|
机器学习/深度学习 数据采集
构建高效机器学习模型的最佳实践
【5月更文挑战第11天】 在数据驱动的时代背景下,机器学习已经成为企业与研究者解决复杂问题的重要工具。本文将探讨构建高效机器学习模型的关键步骤,包括数据预处理、特征工程、模型选择与调参、以及性能评估。我们将深入分析这些步骤的重要性,并提供实用的技巧和最佳实践,以助读者提高模型的预测能力与泛化性能。通过案例分析和经验总结,本文旨在为从业者提供一套系统的方法论,帮助他们在面对各种机器学习项目时能够更有效地设计和实现解决方案。
4 0
|
3天前
|
机器学习/深度学习
【机器学习】如何根据训练集大小选择分类器?
【5月更文挑战第10天】【机器学习】如何根据训练集大小选择分类器?
|
3天前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的最佳实践
【5月更文挑战第10天】 在面对海量数据和复杂问题时,构建一个既高效又准确的机器学习模型显得至关重要。本文将探讨一系列实用的技术和策略,旨在帮助数据科学家和工程师优化他们的机器学习工作流程。从数据预处理到模型训练,再到最终的评估与部署,我们将深入讨论如何通过最佳实践提升模型性能,同时确保过程的可复现性和可扩展性。
|
3天前
|
机器学习/深度学习 数据采集 监控
构建高效机器学习模型的五大技巧
【5月更文挑战第10天】 在数据驱动的时代,机器学习模型的性能往往决定了一个项目的成败。本文将深入探讨如何通过五个关键步骤——数据预处理、特征工程、模型选择、超参数调优以及模型评估与部署,来构建一个高效的机器学习模型。我们将提供实用的技术细节和策略,帮助读者避免常见的陷阱,并提升模型的准确性和泛化能力。无论你是机器学习新手还是有经验的开发者,本文的技巧都将对你构建更健壮、高效的模型大有裨益。
|
5天前
|
机器学习/深度学习 算法 异构计算
构建高效机器学习模型的策略与实践
【5月更文挑战第8天】 随着数据科学领域的不断进步,机器学习(ML)已成为解决复杂问题的重要工具。然而,构建一个既高效又准确的ML模型并非易事。本文将详细探讨在设计和训练机器学习模型时可以采用的一系列策略,以优化其性能和效率。我们将讨论特征工程的重要性、选择合适的算法、调整参数以及评估模型的有效性。通过这些策略,读者将能够更好地理解如何提升模型的预测能力并避免常见的陷阱。
|
7天前
|
机器学习/深度学习 数据采集 人工智能
构建高效机器学习模型:从数据预处理到性能优化
【5月更文挑战第6天】 在机器学习领域,构建一个高效的模型并非一蹴而就的过程。它要求开发者具备从数据预处理、特征工程到算法选择和性能调优的全面技能。本文将深入探讨如何通过精确的数据处理流程、细致的特征提取以及先进的模型调优技巧来提升机器学习模型的准确性和效率。我们将分享实用的技术策略,并通过案例分析展示如何应对过拟合、欠拟合以及其他常见的性能瓶颈。
23 6
|
10天前
|
机器学习/深度学习 算法
构建高效机器学习模型的五大关键技术
【5月更文挑战第3天】 在数据驱动的时代,机器学习已经成为挖掘信息、预测未来和优化决策的关键工具。本文将深入探讨构建高效机器学习模型的五大关键技术:特征工程、模型选择、超参数调优、集成学习和模型评估。这些技术不仅能够提高模型的性能,还能确保模型的泛化能力和可解释性。
|
12天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型的最佳实践
【5月更文挑战第2天】 在数据驱动的时代,机器学习已成为智能系统不可或缺的组成部分。本文将深入探讨构建高效机器学习模型的策略,包括数据预处理、特征工程、模型选择、调参技巧以及模型评估方法。我们将通过实际案例分析,揭示如何避免常见陷阱,并利用最佳实践提高模型的性能和泛化能力。文章旨在为从业者提供一套实用的技术指南,帮助他们在面对复杂数据时能够做出明智的决策,并最终实现机器学习项目的高效落地。