从零开始机器学习(一)

跟着李沐学AI 【04 数据操作+数据预处理】

记录和处理在跟着学习时发生的一些问题

一、 数据操作实现

这块没什么难点,跟着打并理解就行了

import torch

x = torch.arange(12)
x.shape
x.numel() #标量的总数
X = x.reshape(3,4) #改变张量的形状而不是改变元素的数量和值的大小

torch.zeros((2,3,4)) #可构建元素为全一、全零或其他常量
torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]]).shape #为张量中的每个元素赋值

x = torch.tensor([1.0,2,4,8])
y = torch.tensor([2,2,2,2])
x+y, x-y, x*y, x/y, x**y # **是求幂运算

#可将多个张量连接起来
X = torch.arange(12,dtype=torch.float32).reshape((3,4))
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) #列合并

#对张量中所有元素进行求和会产生只有一个元素的张量
X.sum()

#即使形状不同,仍可调用广播机制来执行元素操作
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
a+b 

X[-1], X[1:3] #可以用[-1]来选择最后一行的元素,[1:3]选择第二第三行的元素
X[1,2] = 9 #制定索引将元素写入矩阵
X[0:2 , :] = 12 #为多个元素赋值(第一行、第二行)

#运行一些操作可能会导致为新结果分配内存
before = id(X)
X += Y
id(X) == before

#转换为numpy张量
A = X.numpy()
B = torch.tensor(A)
type(A),type(B)

#将大小为1的张量变为python标量
a = torch.tensor([3.5])
a , a.item , float(a) , int(a)

结果就不一一贴出了,应该没问题的哈

二、 数据预处理实现

这块地方会时不时出现一些小问题,好在都解决了,稍微记录一下。

1、 创建一个人工数据集,并存储在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')

这个地方会报错如下所示:

处理方法为,将前两行代码中的 '..' 改为 '.' ,如下所示

os.makedirs(os.path.join('.','data'),exist_ok=True)
data_file = os.path.join('.','data','house_tiny.csv')
2、 从创建的csv文件中加载原始数据集
import pandas as pd
data = pd.read_csv(data_file)
print(data)

需要引入pandas来读取csv文件并加载数据集,打印的情况如下所示:

倘若是直接输出data将会以excel表格的形式打印数据集,更美观

3、 处理缺失的数据,可以考虑插值(或删除)
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)

在这里会发生报错:

需要对inputs进行处理,代码改为

inputs = inputs.fillna(inputs.mean(numeric_only = True))

就没有问题啦,能成功处理inputs中缺失的数据,插入inputs原来未缺失数据的平均值

4、 对类别值或离散值,将"NaN"视为一个类别
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

若就这样输出,得到的结果将如下所示:

Alley_Pave 与Alley_nan 的值是True与False,在后续将csv文件转为张量时会由于类型不匹配而报错,因此需要对inputs的第二、三列进行处理改变数据类型

inputs = pd.get_dummies(inputs, dummy_na=True)
inputs.iloc[:,1:] = inputs.iloc[:,1:].astype(int)

从而得到的inputs如下所示:

可以进行下一步啦!

5、 将csv文件转为张量
import torch

X,y = torch.tensor(inputs.values),torch.tensor(outputs.values)
X,y

转换以后的结果为

三、 完结撒花!❀

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

玲ling_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值