深度学习_2 数据操作之数据预处理

news2025/2/28 3:10:54

数据操作

机器学习包括的核心组件有:

  1. 可以用来学习的数据(data);
  2. 如何转换数据的模型(model);
  3. 一个目标函数(objective function),用来量化模型的有效性;
  4. 调整模型参数以优化目标函数的算法(algorithm)。

我们要从数据中提取出特征,机器学习、深度学习通过特征来进一步计算得到模型。因此下面主要介绍的是对数据要做哪些操作。

基本操作

深度学习里最多操作的数据结构是N维的数组。

0维:一个数,一个标量,比如1.

1维:比如一个一维数组,他的数据是一个一维的向量(特征向量)。

2维:比如二维数组(特征矩阵)。

当然还有更多维度,比如视频的长,宽,时间,批量大小,通道……

如果我们想创建这样一个数组,需要明确的因素:

  1. 数组结构,比如3*4.
  2. 数组数据类型,浮点?整形?
  3. 具体每个元素的值。

访问元素的方式:

1698545535004

1:3 是左闭右开,表示不包含第3行。

双冒号是跳着访问,后跟步长。比如 ::3 表示从第0行开始访问,每3行访问一次。

明白了这些,那接下来我们就创建一个数组。在机器学习中这种数据的容器一般被称作张量.

创建张量

这部分代码在 jupyter/pytorch/chapter_preliminaries/ndarray.ipynb 里。

在其中可以运行尝试代码部分,创建一维张量:

import torch
X = torch.arange(12) 	# 自动创建 0-11 的一维张量。输入 X 查看 X 内元素数据,输出:
# tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
X.shape					# 查看向量形状。输出 torch.Size([12]),指长12的一维向量
X.numel()				# 只获取长度,输出12
X = X.reshape(3, 4)		# 重新改成了3行4列形状。变成了0123 4567 891011
torch.zeros((2, 3, 4))	# 创建了一个形状为(2,3,4)的全0张量
# tensor([[[0., 0., 0., 0.],
#          [0., 0., 0., 0.],
#          [0., 0., 0., 0.]],
# 
#         [[0., 0., 0., 0.],
#          [0., 0., 0., 0.],
#          [0., 0., 0., 0.]]])
# torch.ones 同理,是全1的
# torch.randn 是取随机数,随机数是均值=0,方差=1的一个高斯分布中取
torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])	# 给定值创建
torch.exp(X)			# 求e^x中每个元素值得到的新张量

reshape 很有意思,它不是复制原数组后重新开辟了一片空间,而是还是对原数组元素的操作(只不过原来是连续12个数,现在我们把他们视作4个一行的3行元素。存储空间都是连续的)。因此如果我们对 reshape 后的数组赋值,原数组值也会改变。

算术运算

对于两个相同形状的向量可以进行+ - * / **(求幂运算)运算。

x = torch.tensor([1.0, 2, 4, 8])	# 1.0 为了让这个数组变成浮点数组
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y  # **运算符是求幂运算
# Output: 
(tensor([ 3.,  4.,  6., 10.]),
 tensor([-1.,  0.,  2.,  6.]),
 tensor([ 2.,  4.,  8., 16.]),
 tensor([0.5000, 1.0000, 2.0000, 4.0000]),
 tensor([ 1.,  4., 16., 64.]))
x==y								# 每一项分别判断是否相等。我试了一下,数据类型不影响。2.0==2
x.sum()								# 所有元素求和
张量连接
X = torch.arange(12, dtype=torch.float32).reshape((3,4))	# 创建 float32 位的张量
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)			# 行和列两个维度的拼接
# Output: 
(tensor([[ 0.,  1.,  2.,  3.],
         [ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.],
         [ 2.,  1.,  4.,  3.],
         [ 1.,  2.,  3.,  4.],
         [ 4.,  3.,  2.,  1.]]),
 tensor([[ 0.,  1.,  2.,  3.,  2.,  1.,  4.,  3.],
         [ 4.,  5.,  6.,  7.,  1.,  2.,  3.,  4.],
         [ 8.,  9., 10., 11.,  4.,  3.,  2.,  1.]]))
# 这里我看到弹幕前辈的讲解,感觉很受用。行是样例,列是特征属性,这个类似 MySQL 的关系数据库理解
广播机制

即使两个张量形状不同,也有可能通过广播机制进行按元素操作。

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a, b
# Output: 
(tensor([[0],
         [1],
         [2]]),
 tensor([[0, 1]]))

a + b			# 把a按列复制2份,b按行复制3份,都变成3*2的张量进行操作
# Output:
tensor([[0, 1],
        [1, 2],
        [2, 3]])
索引
X[-1], X[1:3]						# 这里和前面介绍的概念一样。-1 是倒数第一个元素(一个n-1维度张量),1:3 是第2,第3个元素不包括第4个元素。
# Output:
(tensor([ 8.,  9., 10., 11.]),
 tensor([[ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.]]))
X[1,2]=9							# 写入
X[0:2, :] = 12						# 批量写入,给0-1行,所有列写成12
X
# Output:
tensor([[12., 12., 12., 12.],
        [12., 12., 12., 12.],
        [ 8.,  9., 10., 11.]])
节省内存

有一些操作会分配新内存。比如 Y=Y+X,并不是直接在 Y 的原地址上加了X,而是在新地址上计算得到 Y+X,让 Y 指向新地址。

可以通过 id(X) 函数来查看地址。

Y[:]=Y+X 或者 Y+=X 会在原地执行计算,Y 地址不变。

类型转换

转换为 numpy 张量:A=X.numpy()

张量转换为标量:

a=torch.tensor([3.5])
a.item()				# 3.5
float(a)				# 3.5
int(a)					# 3

数据预处理

实际处理数据的时候我们并不是从张量数据类型开始的,我们可能得到一个 excel 文件,自己把它转换成 python 张量。以及在转换之前,我们可能对数据进行预处理,比如把其中的空值统一赋值为0之类的操作。以下是转换步骤。

首先我们创建一个 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')

三个属性分别是 room 数量,走廊状态(比如铺了地板),价格。

然后我们把这个数据读入 python,加载原始数据集。

# 如果没有安装pandas,只需取消对以下行的注释来安装pandas
# !pip install pandas
import pandas as pd

data = pd.read_csv(data_file)

这个数据集里还是有很多 NaN 项的,我们要对其进行修改替换。数值类典型处理方式是插值删除

首先最后一列数据是完整不需要修改的,那么我们只要处理前两列,我们把前两列数据单独拿出来做完处理最后进行张量拼接。

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

然后我们把 NumEooms 中的 NaN 值用均值替代,

inputs = inputs.fillna(inputs.mean(numeric_only=True))
print(inputs)
# Output:
   NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN

对于 Alley 列,只有两种状态:NaN 和 Pave。我们用 pandas 的方法,把 NaN 也视作一个类,自动拆成两列设置值。

inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
# Output:
   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

最后,我们将前两列处理后得到的结果与最后一列转换为张量后进行拼接。

import torch

X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))
y=y.reshape(4,1)
torch.cat((X,y),dim=1)
# Output:
tensor([[3.0000e+00, 1.0000e+00, 0.0000e+00, 1.2750e+05],
        [2.0000e+00, 0.0000e+00, 1.0000e+00, 1.0600e+05],
        [4.0000e+00, 0.0000e+00, 1.0000e+00, 1.7810e+05],
        [3.0000e+00, 0.0000e+00, 1.0000e+00, 1.4000e+05]], dtype=torch.float64)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1158276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次有趣的tp5代码执行

目录 0x00 前言 0x01 基础信息 0x02 突破 base64编码与php://filter伪协议 tp 5 method代码执行的细节 0x03 总结 免费领取安全学习资料包!(私聊进群一起学习,共同进步)​编辑 0x00 前言 朋友之前给了个站,拿了…

一对一发放私密成绩:成绩查询系统全攻略

有没有想过让学生自助查询成绩?介绍一种全新的成绩查询系统,帮你实现一对一发放私密成绩。 一、如何用代码实现学生自助查询成绩? 如果你是一名懂得编程的老师,那么你可以考虑使用Python编写一个简单的成绩查询系统。下面是一个基…

Sqoop的安装和使用

目录 一.安装 二.导入 1.全量导入 一.MySQL导入HDFS 二.MySQL导入Hive 2.增量导入 一.过滤导入hdfs/hive 二.导出 一.安装 1.下载地址:sqoop下载地址 2.解压 tar -zxvf ./sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ../module/ 3.改名和配置归属权限 #改名…

ChatGPT将迎来巨大更新!变得无所不能!

此次更新,主要是2点: 1、直接可以与PDF和数据文件对话,只需上传即可完成聊天 2、不用来回切换联网、作图功能,已经将这些功能进行了集成,直接在对话中使用即可,比如之前的联网(Browse with Bi…

【教程】R语言生物群落(生态)数据统计分析与绘图

查看原文>>>R语言生物群落(生态)数据统计分析与绘图实践 暨融合《R语言基础》、《tidyverse数据清洗》、《多元统计分析》、《随机森林模型》、《回归及混合效应模型》、《结构方程模型》、《统计结果作图》七合一版本方案 R 语言作的开源、自…

求职应聘,请问笔试题,面试题,性格测评题是什么?

各家企业的面试测评,可能各不相同,如果要想得到原题有两种办法: 1、做过的同学,记住了原题,也在玩知乎,正好看到了你的提问,而且他很乐意回答这个问题,也不嫌码字辛苦。这个概率不高…

首次实现容错量子计算机!奥地利展示量子实力

(图片来源:网络) 奥地利因斯布鲁克大学的实验物理学家首次在容错量子比特上实现通用计算,并演示了如何在一台量子计算机上编程。 虽然当代计算机采用了高质量的制造方法,大大降低了信息处理和存储过程中出现错误的概…

如何编制一个集团公司的数字化转型总体规划?

目录 如何做好企业信息化战略规划? 01 先要立足根本、明确目标 02 信息化推进要由上而下,先易后难 03 强调“流程”与“数据”并重 04 信息化过程要整体规划,分步实施 企业的信息化系统建设 ERP:企业资源计划 MES&#xf…

品牌设计服务展示预约小程序的作用

对企业商家来说,线上线下服务/产品/场景等都需要展示自己的品牌形象,一个好的设计(封面/图案/logo等)往往能起到引流、增强信任度、提升形象等作用,因此品牌设计服务的需求度一直很高。 对品牌设计企业来说&#xff0…

社区投稿|解码Big Vector,开启Sui超扩展性的新篇章

* 本文是来自Sui生态项目Typus团队的投稿,文中「我们」均指代该项目团队,转载时修改部分不准确的用词。 本研究报告介绍了Big Vector的概念,这是一种我们用于 Typus V2 的新数据结构,以缓解 Sui 上数组和动态字段(dynamic field)…

怎么让小程序排名靠前?小程序搜索排名问题

小程序的排名是十分重要的,因为这会直接影响到用户的点击率,用户在搜索小程序时,会看到搜索引擎的前几条搜索结果,如果您的小程序不在这些位置上,很可能就会被忽略,所以,想要让用户能够看到您的…

【广州华锐互动】VR虚拟现实旅游:改变游客旅游方式,提升旅游体验

虚拟现实(Virtual Reality,简称VR)是一种利用电脑模拟产生一个三维的虚拟世界,提供用户关于视觉、听觉、触觉等感官的模拟体验。随着科技的进步,VR虚拟现实技术已逐渐进入各行各业,尤其在旅游行业中的应用&…

佩戴比较舒适的蓝牙耳机有哪些?几款戴着很舒服的蓝牙耳机推荐

你是否感到困扰?佩戴普通的入耳蓝牙耳机久了,很容易引发耳朵的不适感,甚至对耳膜造成一定程度的损伤?现在有一种开放式的耳机出现在大家的视野中。这种耳机利用了骨传导传声的独特特性,只需要挂在耳朵上就能享受到音乐…

大模型开启人工智能的新时代

大模型是指具有非常大的参数数量的人工神经网络模型。在深度学习领域,大模型通常是指具有数亿到数万亿参数的模型。这些模型通常需要在大规模数据集上进行训练,并且需要使用大量的计算资源进行优化和调整。 大模型通常用于解决复杂的自然语言处理、计算…

MacBook风扇这么响,原来是因为这些细节没注意!

你有没有发现,你的MacBook风扇总是在不经意间声音特别大?平时我们的Mac需要做一些繁重的工作。例如,当涉及到Web开发,照片修饰和视频编辑时。听到我们的MacBook Pro风扇控制器弹起并且MacBook Pro风扇的噪音增大,因为我…

C++继承——圆形和圆柱体

C继承 Circular圆形类 /*圆形类*/ class Circular { private:const static double PI;double R 0; public:Circular() default;Circular(double r);double GetArea(); /*圆面积*/double GetGirth(); /*圆周长*/ }; const double Circular::PI 3.14;Circular::Circula…

实习答点。

计数单————>变成记录采购开单的记录表,实时的进行数据比较和统计。 具有: 采购前可以提供实时的数据比较,选择最合适的物品进行采购。 1.警戒库存 通过日期范围进行分析比较往年的采购量和库存量进行比较,进行判断今年的…

Q-CTRL首次在量子市场获得ISO 27001国际标准认证

​(图片来源:网络) 国际公认的ISO 27001标准概述了信息安全管理系统(ISMS)的实施,并表现了管理风险的能力,包括与客户数据安全相关的风险。总部位于悉尼的Q-CTRL是第一家获得ISO 27001认证的独…

数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题

🧸欢迎来到dream_ready的博客,📜相信你对这篇博客也感兴趣o (ˉ▽ˉ;) 📜ArrayList简介及使用全方位手把手教学(带源码),用ArrayList实现洗牌算法,3个人轮流拿牌(带全部源码) 目录 顺序表简介 …

法律咨询服务预约小程序的作用

纠纷不断,法律服务的需求度非常高,公司/个人在多个场景都有可能使用到法律业务,对相关咨询机构来说,需要不断拓展客源和品牌宣传以获得更多生意增长,然而线下拓展困难,线上是商家们发展的必要渠道。 那么通…