深度学习——数据预处理

前言

在深度学习中,我们经常是从处理原始数据而不是直接从准备好的张量格式数据开始解决实际问题的,因此学习数据的预处理是十分必要且重要的。在Python常用的数据分析工具中,我们通常使用pandas软件包(pandas可以与张量兼容)。本文将简要介绍怎么用pandas预处理数据,并将原始数据转化为张量格式数据。

如果在阅读过程中各位大佬发现了问题,请直接在评论区指正。也希望一同学习深度学习的同学们能在评论区积极留言交流,互相学习进步。

一、读取数据集

首先我们人工创建一个数据集存放在csv文件里面,以其他格式存储的数据也可以通过类似的方式进行处理。创建数据集的代码如下。

import os

os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')
    f.write('NA,Pave,127500\n')
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

这里创建好的数据集会存储在一个python项目文件相同的data文件夹中,文件名称为house_tiny。

如果想要自行命名文件,可以通过对下图所示部位的修改来改变。

 修改①处可以改变存储文件夹的名称,修改②处可以改变存储文件的名称。

要从创建的csv文件中加载原始数据集,我们导入pandas包并调用read_csv函数。该数据集有四行三列。其中每行描述了房间数量、巷子类型和房屋价格。没有安装过pandas的同学可以参照这篇文章来安装。学习深度学习前期准备

import pandas as pd

data = pd.read_csv(data_file)
print(data)

 二、处理缺失值

在数据处理中“NaN”代表缺失值,为了处理缺失的数据,典型的方法包括插值法删除法, 其中插值法用一个替代值弥补缺失值,而删除法则直接忽略缺失值。这里以插值法为例。

同各国iloc索引函数,我们将data分为input和output,前者是data的前两列,后者是data的第三列。我们用均值来代替同一列中的缺失值。(下图是书中源代码)

如果我们直接使用书中源代码,那么会出现如下报错

TypeError: can only concatenate str (not "int") to str

这是因为第二行识别为str,所以我们在mean()中加入限制条件——仅在数据类型为数值的列进行平均值插值。如下列代码。(这一部分借鉴了这位大佬的代码)动手学深度学习pytorch:inputs.fillna(inputs.mean())报错can only concatenate str (not “int“) to str_inputs = inputs.fillna(inputs.mean())-CSDN博客

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean(numeric_only = True))
print(inputs)

 对于inputs中的离散值或类别值,我们将NaN视作一个类别。由于Alley只接收两种值——NaN或者Pave,pandas会将他们自动转化为两个类别:"Alley_Pave"和"Alley_NaN"。巷子行为类型为“Pave”的会将“Alley_Pav”的行为值设为1,将“Alley_NaN”行为值设为0。反之亦然。

inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

三、转化为张量格式 

到了这一步,inputs和outputs中所有的条目都是数值类型。将他们转化为张量类型中后我们就可以使用之前所说的张量函数来进行进一步的操作。

import torch

X = torch.tensor(inputs.to_numpy(dtype=float))
Y = torch.tensor(outputs.to_numpy(dtype=float))
print(X)
print(Y)

 结语

以上就是数据预处理部分的内容。

如果各位大佬在阅读过程中发现有错误的地方请在评论区留言指正。也希望各位同学能在评论区留言互相交流学习。

深度学习数据集预处理是深度学习算法中非常重要的一步。数据预处理的目的是为了提高深度学习算法的性能和效果。在数据预处理中,常用的方法包括零均值化(中心化)、数据归一化(normalization)、主成分分析(PCA)和白化(whitening)等。\[1\] 零均值化(中心化)是将数据的均值调整为0,这样可以消除数据的偏差。数据归一化是将数据的范围缩放到一个固定的区间,常用的方法有将数据缩放到0到1之间或者将数据标准化为均值为0,方差为1的分布。主成分分析(PCA)是一种降维的方法,通过线性变换将原始数据映射到一个新的坐标系中,使得新的坐标系中的数据具有最大的方差。白化是对数据进行线性变换,使得变换后的数据具有相互独立且方差为1的特性。 在进行数据预处理时,需要注意一些事项。首先,要根据具体的问题和数据集选择合适的预处理方法。其次,要确保数据预处理的过程不会引入额外的噪声或失去重要的信息。最后,要注意在训练集和测试集上使用相同的数据预处理方法,以保持一致性。 总之,深度学习数据集预处理是提高深度学习算法性能的重要步骤,通过合适的数据预处理方法可以提高算法的准确性和效果。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [深度学习——数据预处理篇](https://blog.csdn.net/LLyj_/article/details/87606704)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易杨MYY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值