李沐【动手学深度学习V2】-数据操作+数据预处理(2023.06.19)

参考链接:Pytorch基本操作

一、N维数组样例

N维数组是机器学习和神经网络的主要数据结构
在这里插入图片描述在这里插入图片描述

二、创建数组

在这里插入图片描述

三、访问元素

在这里插入图片描述
概念-》(1)::表示有三个参数,前两个是左闭右开的区间,第三个是步长,默认为1
(2)张量是表示成一个 数值组成的数组,这个数组可能有多个维度
(3)我们可以通过张量的shape属性来访问张量的形状和张量中元素的总数,张量求和可以用sum(),如果要指定维度求和,可以 sum(axis=?)来表示,
例如三维张量(2,3,4)sum(axis=0)就表示矩阵相加,sum(axis=1)就表示行相加,sum(axis=2)就表示列相加,维度也会消失,但如果在sum中增加参数(keepdims=True)维度就可以不消失但会变为1,
A.mean()求均值,
torch.mv(A,x)表示矩阵和向量的乘积,
torch.mm(A,B)表示矩阵和矩阵的乘积,
torch.norm(x)向量的模(这里放矩阵也可以,同理)
torch.abs(x).sum()向量元素绝对值的和
(4)要改变一个张量的形状而不改变元素数量和元素值,我们可以调用reshape函数
(5)使用全0、全1、其他常量或者从特定分布中随机采样的数字用zeros(),ones()
(6)通过提供包含数值的Python列表(或嵌套列表)来为所需张量中的每个元素赋予确定值
(7).shape()中的参数,表示每一层中括号中有几个元素,括号层数有3层,第一个轴只有1个元素,第二个轴有3个元素,第三个轴有4个元素,这就是xx.shape1,3,4的来源(或者这样理解,一个三维张量,有一个二维矩阵,每一个二维矩阵有三个向量,每一个向量有4个标量)
(8)我们可以把多个张量链接在一起,dim的值表示在哪个中括号合并,dim=0就表示增加最外层中括号的元素个数,dim=1就表示增加次外层中括号的元素个数。以此类推
在这里插入图片描述
(9)通过逻辑运算符构建二元张量
在这里插入图片描述
(10)对张量中的所有元素求和会产生一个只有一个元素的张量
在这里插入图片描述
(11)即使形状不同,我们仍然可以通过调用广播机制来执行按元素操作,都是往比自己高维度来复制。
在这里插入图片描述

(12)运行一些操作可能会导致为新结果分配内存
在这里插入图片描述
(13)转换为Numpy张量
在这里插入图片描述

四、数据预处理

(1)创建一个人工数据集,并存储在csv(逗号分隔值)文件
在这里插入图片描述
(2)从创建的csv文件中加载原始数据集
在这里插入图片描述
(3)为了处理缺失的数据,典型的方法包括插值和删除,这里,我们将考虑插值
在这里插入图片描述
pd.get_dummies() 函数是 pandas 提供的一种数据转换方式,用于将分类变量(categorical variable)转换为数值型变量(numerical variable),从而方便机器学习算法的处理。

在给定的代码中,inputs 是一个包含两个特征的 pandas DataFrame,其中的 “NumRooms” 特征是数值型变量,而 “Alley” 特征是分类变量,包含两个取值 “Pave” 和 “NA”。为了方便机器学习算法的处理,我们可以使用 pd.get_dummies() 函数将 “Alley” 特征转换为两个数值型变量 “Alley_Pave” 和 “Alley_NA”,其中 “Alley_Pave” 和 “Alley_NA” 的取值分别为 0 和 1,表示原始数据中的 “Alley” 特征是否等于 “Pave” 或 “NA”。

在代码中,pd.get_dummies(inputs, dummy_na=True) 的参数 dummy_na=True 表示将 “Alley” 特征中的缺失值(“NA”)也视为一种取值,并将其转换为一个新的数值型变量 “Alley_nan”,取值为 0 或 1,表示原始数据中的 “Alley” 特征是否缺失。在这里插入图片描述
(4)现在inputs和output中的所有条目都是数值类型,它们可以转换为张量格式
在这里插入图片描述

import torch
import os
import pandas as pd
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")
data=pd.read_csv(data_file)
print(data)
inputs,outputs=data.iloc[:,0:2],data.iloc[:,2]
inputs=inputs.fillna(inputs.mean(numeric_only=True))
print(inputs)
inputs=pd.get_dummies(inputs,dummy_na=True,dtype=int)
print(inputs)
x,y=torch.tensor(inputs.values),torch.tensor(outputs.values)
print(x)
print(y)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值