Bootstrap

李沫深度学习笔记--数据预处理+矩阵计算+自动求导

部分一:数据预处理实现

#今天我们进行数据预处理的学习
#1。1进行数据集的建立
import  os
os.makedirs(os.path.join('data'),exist_ok=True)
#makedir是创建文件夹目录
file = os.path.join('data','hh.csv')
#这一步是进行文件的创建,选择路径 data/first.scv
with open(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')
#1.2 数据集读取
import pandas as  pd
data = pd.read_csv(file) #使用pd包对scv文件进行读取操作
#print(data)
#1.3 利用 均值插值进行缺失值处理
inputs,input2,outputs =data.iloc[:,0:1],data.iloc[:,1],data.iloc[:,2]
#iloc是选择数据的位置,如第一个我们选择第一列的数据
inputs =inputs.fillna(inputs.mean())
#fillna是对数据集进行填充,采用均值
print(inputs)
input2=pd.get_dummies(input2,dummy_na=True,dtype=int)
#pd.get_dummies():这是pandas库中的一个函数,用于将分类变量转换为独热编码。独热编码是一种常用的编码技术,用于将分类数据转换为可以被机器学习算法处理的形式。
#dummy这个参数告诉函数为缺失值创建一个单独的列。也就是说,对于每个包含缺失值的分类特征,都会额外创建一个表示缺失值的列。
print(input2)
inputs=inputs.join(input2)
print(inputs)

#1.4对数据类型转换为张量
import  torch
x,y=torch.tensor(inputs.values),torch.tensor(outputs.values)
#.values是让数据以数组的形式进行访问
print(x,y)

部分二:矩阵计算与自动微分

#1.矩阵计算,对特定轴进行求和
import  numpy as  np
hh=np.arange(20).reshape((5,4))
#print(hh)
hh_axis_1=hh.sum(axis=1)
#print(hh_axis_1)#总结,对哪些轴进行求和,哪些轴的数去掉,比如对列轴(4)进行求和,输出数量为5的向量
hh_axis_2 =hh.sum(axis=1,keepdims=True)#如果想保留所求和轴的维度,可以使用keepdim参数,这对有时在调用函数来计算总和或均值时保持轴数不变会很有用。
#print(hh_axis_2)
#2.对称矩阵的转置矩阵不变
import  torch
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]],dtype=float)
B_T=B.T
#print(B==B_T)
#3.对数组张量,进行求和求平均
#print(B.sum(),B.mean())
#4.矩阵向量积
import torch

A = torch.tensor([[1, 2], [3, 4]])
v = torch.tensor([5, 6])

w = torch.mv(A, v)
#print(w)
#5.矩阵矩阵乘法
#B = torch.ones(4, 3)
#torch.mm(A, B)
#6.机器学习中的范数(可以理解为向量的模长)
uu=torch.tensor([6.,8.])
#print(uu.norm())
#7.自动求导
x=torch.arange(4.0,requires_grad=True)
#requires_grad=True:这个参数告诉PyTorch,我们希望跟踪这个张量x的梯度,以便在后续的运算中进行自动微分。
y=2*torch.dot(x,x)#这里是对x进行点积操作
y.backward()# backward() 方法通常用于计算标量(即只有一个数值的变量)的梯度,这里是启动y对x的积分
print(x.grad)#调用.gard方法进行梯度访问
x.grad.zero_()#这一步是进行清0,因为pytorch会积累梯度
y=2*x.sum()#注意y必须为标量
y.backward()
print(x.grad)

这里我们需要理解:

标量关于向量进行求导,得到的是一个向量,
向量关于向量求导,得到的是一个矩阵。

 

有很多数学公式还搞不懂,今天先被这折磨到此吧,呜呜

 

;