数据预处理全流程:从创建数据集到 PyTorch 张量的完整实践

在机器学习和深度学习任务中,数据预处理是至关重要的第一步。本文通过一个完整的示例,演示如何创建包含缺失值的数据集、处理不同类型的缺失值,并将数据转换为 PyTorch 张量,为后续模型训练奠定基础。

一、创建数据集并存储为 CSV 文件

我们首先人工创建一个包含缺失值的房屋数据集,并将其存储为 CSV 格式。CSV 文件因其通用性和易读性,是数据存储与交换的常用格式。

python

运行

import os

# 创建数据目录(若不存在)

os.makedirs(os.path.join('..', 'data'), exist_ok=True)

data_file = os.path.join('..', 'data', 'house_tiny.csv')

# 写入数据(每行包含特征和标签,NA表示缺失值)with open(data_file, 'w') as f:

    f.write('NumRooms,Alley,Price\n')  # 列名

    f.write('NA,Pave,127500\n')        # 样本1:房间数缺失,巷子类型为Pave

    f.write('2,NA,106000\n')           # 样本2:巷子类型缺失,房间数为2

    f.write('4,NA,178100\n')           # 样本3:巷子类型缺失,房间数为4

    f.write('NA,NA,140000\n')          # 样本4:房间数和巷子类型均缺失

关键点:

os.makedirs 的 exist_ok=True 避免重复创建目录导致的错误。

CSV 文件中用 NA 表示缺失值,后续会被 Pandas 自动识别为 NaN。

二、读取数据集并查看原始数据

使用 Pandas 的 read_csv 函数加载 CSV 文件,并打印原始数据以确认格式正确性。

python

运行

import pandas as pd

# 读取CSV文件为DataFrame

data = pd.read_csv(data_file)print("原始数据:")print(data)

输出结果:

plaintext

   NumRooms Alley   Price

0       NaN  Pave  127500

1       2.0   NaN  106000

2       4.0   NaN  178100

3       NaN   NaN  140000

关键点:

Pandas 自动将 NA 转换为 NaN(Not a Number),标识缺失值。

数据包含两类特征:

数值型特征:NumRooms(房间数)。

类别型特征:Alley(巷子类型,取值为Pave或缺失)。

标签:Price(房价)。

三、处理缺失值

缺失值处理是数据预处理的核心步骤之一,常见方法包括删除法和插值法。本例中采用插值法,针对不同类型的特征分别处理。

1. 数值型特征:均值填充法

python

运行

# 划分输入特征(前两列)和输出标签(最后一列)

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]

# 用每列的均值填充数值型缺失值(NaN)

inputs = inputs.fillna(inputs.mean())print("数值型缺失值处理后:")print(inputs)

输出结果:

plaintext

   NumRooms Alley

0       3.0  Pave

1       2.0   NaN

2       4.0   NaN

3       3.0   NaN

原理:

inputs.mean() 计算每列的均值(自动忽略 NaN)。

fillna 用均值填充对应列的缺失值。本例中,NumRooms 列的均值为 (2+4)/2=3,因此两个缺失值均被填充为 3.0。

2. 类别型特征:独热编码(含缺失值处理)

python

运行

# 将类别型特征转换为独热编码,缺失值(NaN)视为独立类别

inputs = pd.get_dummies(inputs, dummy_na=True)print("独热编码处理后:")print(inputs)

输出结果:

plaintext

   NumRooms  Alley_Pave  Alley_nan

0       3.0           1          0

1       2.0           0          1

2       4.0           0          1

3       3.0           0          1

原理:

pd.get_dummies 将类别列 Alley 转换为二进制列:

Alley_Pave=1 表示巷子类型为 Pave,Alley_nan=1 表示缺失值。

dummy_na=True 强制将缺失值编码为独立类别(否则会被忽略)。

四、转换为 PyTorch 张量

预处理后的特征和标签需转换为 PyTorch 张量,以便输入深度学习模型。

python

运行

import torch

# 将Pandas数据转换为NumPy数组,再转为PyTorch张量

X = torch.tensor(inputs.to_numpy(dtype=float))

y = torch.tensor(outputs.to_numpy(dtype=float))print("PyTorch张量:")print(X, y)

输出结果:

plaintext

tensor([[3., 1., 0.],

        [2., 0., 1.],

        [4., 0., 1.],

        [3., 0., 1.]])

tensor([127500., 106000., 178100., 140000.])

关键点:

to_numpy(dtype=float) 确保数据类型为浮点数,避免 PyTorch 张量类型不匹配。

转换后的 X 为特征张量(形状为 (4, 3)),y 为标签张量(形状为 (4,)),可直接用于模型训练。

五、总结:数据预处理核心流程

数据创建与读取:通过 CSV 文件存储数据,利用 Pandas 解析为 DataFrame。

缺失值处理:

数值型特征:均值(或中位数、众数)填充。

类别型特征:独热编码,缺失值视为独立类别。

特征工程:将非数值型数据(如类别标签)转换为模型可识别的数值格式。

数据格式转换:将预处理后的 DataFrame 转换为 PyTorch 张量,适配深度学习框架。

通过这一流程,原始数据被清洗、转换为结构化的输入,为后续机器学习任务(如线性回归、神经网络)提供了可靠的基础。实际应用中,需根据数据特点选择合适的预处理策略(如高维类别特征可采用嵌入法,连续型特征可标准化 / 归一化),以优化模型性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值