Yang's blog Yang's blog
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

编程爱好者
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 传统机器学习

    • 机器学习前言
    • 数据预处理
      • 1.导入相关库
      • 2. 读取数据文件
      • 3. 处理缺失数据
      • 4. 解析分类数据
      • 5. 拆分数据集为训练集和测试集
      • 6. 特征标准化
    • 简单线性回归
    • 多元线性回归
    • 逻辑回归(一)
    • 逻辑回归(二)
    • K近邻法(k-NN)
    • k最近邻分类任务代码演示
    • 支持向量机(SVM)
    • 使用SVM进行二分类
    • 决策树
    • 随机森林
    • 什么是K-means聚类算法
    • 使用K-Means算法进行数据聚类:以鸢尾花数据集为例
  • 联邦学习

    • 联邦学习中的基础算法介绍
    • Advances and Open Problems in Federated Learning
    • Vertical Federated Learning Concepts,Advances, and Challenges
    • 机器学习中的并行计算
    • Boosted Trees 简介
    • SecureBoost:一种无损的联邦学习框架
    • FedGen & Data-Free Knowledge Distillation for Heterogeneous Federated Learning
    • Towards Personalized Federated Learning
    • Distilling the Knowledge in a Neural Network
    • FedMD & Heterogenous Federated Learning via Model Distillation
    • FedFTG & Fine-tuning Global Model via Data-Free Knowledge Distillation for Non-IID Federated Learning
    • MOON & Model-Contrastive Federated Learning
    • Knowledge Distillation in Federated Learning:A Practical Guide
    • DKD-pFed & A novel framework for personalized federated learning via decoupling knowledge distillation and feature decorrelation
    • pFedSD & Personalized Edge Intelligence via Federated Self-Knowledge Distillation
    • FedFD&FAug:Communication-Efficient On-Device Machine Learning:Federated Distillation and Augmentation under Non-IID Private Data
  • 机器学习
  • 传统机器学习
xiaoyang
2024-05-07
目录

数据预处理

# 数据预处理

注意

对于初学者的我一天不够哈哈,多花点时间学习下

本次所用到的数据集点击此处下载Data.csv

# 1.导入相关库

当进行数据预处理时,NumPy和Pandas是两个非常有用的Python库。下面是对它们的简要介绍:

NumPy(Numerical Python)是一个用于科学计算的强大库,提供了高效的多维数组对象和各种用于操作数组数据的函数。它是许多其他数据处理和科学计算库的基础。以下是NumPy的一些主要功能:

  1. 多维数组:NumPy提供了一种称为ndarray的多维数组对象,它可以存储同类型的数据。这种数据结构非常高效,允许您进行快速的数值计算和操作。

  2. 数学函数:NumPy提供了大量的数学函数,包括三角函数、指数函数、对数函数、线性代数运算等。这些函数可以对整个数组或数组的元素进行操作,提供了灵活的数值计算能力。

  3. 广播(Broadcasting):NumPy的广播功能允许在不同形状的数组之间进行操作,使得对一组数组进行计算变得更加简单和高效。

  4. 随机数生成:NumPy具备生成各种概率分布的随机数的功能,这在模拟和统计分析中非常有用。

Pandas是一个基于NumPy构建的数据处理库,提供了高效的数据结构和数据分析工具,特别适合处理和分析结构化的数据。以下是Pandas的一些主要功能:

  1. DataFrame:Pandas的核心数据结构是DataFrame,它是一个二维的、标记了行和列的数据结构。DataFrame可以容纳不同类型的数据,并且提供了强大的索引、切片、过滤和聚合等功能。

  2. 数据读取和写入:Pandas支持从各种文件格式(如CSV、Excel、SQL数据库等)中读取数据,并可以将数据写入这些文件格式。这使得数据的导入和导出变得非常方便。

  3. 数据清洗和预处理:Pandas提供了许多功能强大的工具来处理缺失值、重复数据、异常值等数据清洗任务。它还支持数据转换、重塑和合并,以满足不同的数据处理需求。

  4. 数据分析和统计计算:Pandas具有丰富的数据分析和统计计算功能,可以进行描述性统计、聚合操作、分组计算等。它还支持时间序列分析和数据可视化。

使用NumPy和Pandas可以极大地简化数据预处理的过程,提供了快速、高效且灵活的数据操作和分析能力。无论是数据清洗、转换、统计还是数据探索,它们都是数据科学和机器学习中不可或缺的工具。

当然,我可以帮您编写一篇博客,详细讲解这段代码的每个步骤和方法的参数使用说明。在这篇博客中,我将使用VuePress来创建静态网页并呈现代码和说明。以下是博客的大致结构和内容:

以下是导入的库:

import numpy as np
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import LabelEncoder, OneHotEncoder, StandardScaler
from sklearn.model_selection import train_test_split
1
2
3
4
5
  • SimpleImputer是用于处理缺失数据的类,我们将使用它来填充缺失值。
  • LabelEncoder是用于将分类变量编码为整数的类。
  • OneHotEncoder是用于将整数编码的分类变量转换为独热编码的类。
  • StandardScaler是用于进行特征标准化的类。
  • train_test_split是用于将数据集拆分为训练集和测试集的函数。

# 2. 读取数据文件

接下来,我们需要读取数据文件,并将其存储在一个DataFrame中。在这个示例中,我们假设数据文件是一个CSV文件。以下是读取数据文件的代码:

dataset = pd.read_csv('../data/Data.csv')
X = dataset.iloc[:, :-1].values
Y = dataset.iloc[:, -1].values
1
2
3
  • pd.read_csv用于从CSV文件中读取数据,并将其存储在一个DataFrame中。
  • iloc用于按位置选择数据。[:, :-1]选择除了最后一列之外的所有列作为特征X,[:, -1]选择最后一列作为标签Y。

# 3. 处理缺失数据

现实世界的数据往往会包含缺失值,这会对机器学习算法的性能产生负面影响。因此,我们需要对缺失值进行处理。在这个例子中,我们使用SimpleImputer类来填充缺失值。以下是处理缺失数据的代码:

imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
X[:, 1:3] = imputer.fit_transform(X[:, 1:3])
1
2
  • SimpleImputer类用于处理缺失值。missing_values=np.nan指定缺失值的表示形式为np.nan(NaN),strategy='mean'表示使用特征的平均值来填充缺失值。
  • fit_transform方法用于拟合SimpleImputer对象并将其应用于数据。X[:, 1:3]选择第1列和第2列的数据,并使用imputer.fit_transform方法将缺失值替换为平均值。

# 4. 解析分类数据

当解析分类数据时,我们将针对具有分类或离散值的特征进行处理。这些特征不能直接用于机器学习模型,因为模型通常期望输入是数值型的。下面是对步骤4进行详细解释:

label_encoder_X = LabelEncoder()
X[:, 0] = label_encoder_X.fit_transform(X[:, 0])
1
2

首先,我们使用LabelEncoder类来将第一列(索引为0)的分类特征进行整数编码。LabelEncoder将每个类别映射到一个整数值,从0开始递增。这样做是为了将分类特征转换为机器学习模型可以处理的数字形式。编码后的结果将替换原始数据集X中的第一列。

one_hot_encoder = OneHotEncoder()
X_categorical = one_hot_encoder.fit_transform(X[:, 0].reshape(-1, 1)).toarray()
1
2

接下来,我们使用OneHotEncoder类对整数编码后的特征进行独热编码。独热编码将每个整数值表示为一个二进制向量,其中只有一个元素为1,其余元素为0。这样做是为了避免将整数编码误解为具有顺序关系的连续值。我们使用fit_transform方法将整数编码后的特征转换为独热编码。reshape(-1, 1)将特征转换为单列的二维数组形式,以满足OneHotEncoder的要求。然后,使用toarray()方法将编码后的结果转换为NumPy数组,并将其存储在X_categorical中。

X = np.concatenate((X_categorical, X[:, 1:]), axis=1)
1

最后,我们将独热编码后的特征和剩余的其他特征(在这个例子中是从第二列开始的所有特征)进行连接,形成最终的特征矩阵X。np.concatenate函数用于沿指定轴(这里是axis=1,表示按列连接)将数组进行连接。

label_encoder_Y = LabelEncoder()
Y = label_encoder_Y.fit_transform(Y)
1
2

对于标签(输出),我们使用同样的方法,使用LabelEncoder类将分类标签进行整数编码,以便于后续的模型训练。编码后的结果将替换原始标签数据Y。

通过这些步骤,我们可以将原始数据中的分类特征进行编码,以便于机器学习模型的处理。独热编码可以处理分类特征之间的关系,并避免引入不正确的顺序信息。整数编码则为每个类别分配一个唯一的整数值。这样,我们就可以在后续的步骤中使用经过处理的数据进行机器学习模型的训练和预测。

# 5. 拆分数据集为训练集和测试集

在机器学习中,我们通常需要将数据集拆分为训练集和测试集,以便进行模型的训练和评估。在这个例子中,我们使用train_test_split函数来进行数据集的拆分。以下是拆分数据集的代码:

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
1
  • train_test_split函数用于将数据集拆分为训练集和测试集。X和Y是要拆分的特征和标签数据,test_size=0.2表示将20%的数据作为测试集,random_state=0用于设置随机种子,以确保每次运行代码时得到的拆分结果是相同的。

# 6. 特征标准化

在机器学习中,特征标准化是一个常见的预处理步骤,它将特征的值缩放到一个较小的范围,以便更好地适应模型的训练。在这个例子中,我们使用StandardScaler类对特征进行标准化。以下是特征标准化的代码:

sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
1
2
3
  • StandardScaler类用于对特征进行标准化。我们创建了一个sc_X对象,并使用fit_transform方法来拟合训练集的特征并进行标准化。然后,使用transform方法将测试集的特征进行标准化。

这样,我们就完成了数据预处理的所有步骤。通过对数据进行缺失值处理、分类数据解析、数据集拆分和特征标准化,我们为后续的机器学习模型准备好了干净、可用的数据。

编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12

← 机器学习前言 简单线性回归→

最近更新
01
操作系统
03-18
02
Nginx
03-17
03
后端服务端主动推送消息的常见方式
03-11
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式