使用线性模型参数w=[2,−3.4]⊤、b=4.2 和噪声项生成数据集及其标签:
可以视为模型预测和标签时的潜在观测误差。 在这里我们认为标准假设成立,即�服从均值为0的正态分布。 为了简化问题,我们将标准差设为0.01。
使用d2l包:
from d2l import torch as d2l
import torch
import matplotlib.pyplot as plt
# w: 权重向量(形状为 (特征数,)),num_examples: 样本数量,len(w) 是特征数量
def synthetic_data(w, b, num_examples): # @save
# 用于生成正态分布随机数的函数,这将生成一个形状为(num_examples, len(w))的张量
X = torch.normal(0, 1, (num_examples, len(w))) # X:(1000,2)
# 执行矩阵乘法的函数(矩阵-向量积)
y = torch.matmul(X, w) + b # y:(1000,)
# 添加噪声
# 生成一个与y形状相同的张量,其中的值是从均值为0、标准差为0.01的正态分布中抽取的随机数,模拟现实中的测量误差或数据噪声
y += torch.normal(0, 0.01, y.shape)
return X, y.reshape((-1, 1)) # y.reshape((-1, 1):(1000,1)
true_w = torch.tensor([2, -3.4]) # w:(2,)
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)
print('features:', features[0],'\nlabel:', labels[0])
# 用于设置随后生成的图形的尺寸
d2l.set_figsize()
# 绘制features张量第二列的数据点,并将这些点与labels张量对应的标签关联起来
# scatter函数用来绘制散点图,至少两个参数:x轴和y轴的数据点
# 首先从features张量中选择第二列,.detach()方法用于从当前计算图中分离出这个张量,使其不再参与梯度计算,.numpy()方法将张量转换为NumPy数组,这是matplotlib绘图所需的格式
# features[:, 1]表示features中第二列的所有值组成的一维张量
d2l.plt.scatter(features[:, 1].detach().numpy(), labels.detach().numpy(), 1)
plt.show()
结果图:
不使用d2l包:
from d2l import torch as d2l
import torch
import matplotlib.pyplot as plt
# w: 权重向量(形状为 (特征数,)),num_examples: 样本数量,len(w) 是特征数量
def synthetic_data(w, b, num_examples): # @save
# 用于生成正态分布随机数的函数,这将生成一个形状为(num_examples, len(w))的张量
X = torch.normal(0, 1, (num_examples, len(w))) # X:(1000,2)
# 执行矩阵乘法的函数(矩阵-向量积)
y = torch.matmul(X, w) + b # y:(1000,)
# 添加噪声
# 生成一个与y形状相同的张量,其中的值是从均值为0、标准差为0.01的正态分布中抽取的随机数,模拟现实中的测量误差或数据噪声
y += torch.normal(0, 0.01, y.shape)
return X, y.reshape((-1, 1)) # y.reshape((-1, 1):(1000,1)
true_w = torch.tensor([2, -3.4]) # w:(2,)
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)
print('features:', features[0],'\nlabel:', labels[0])
# 绘图
plt.figure(figsize=(6, 4)) # 设置图形大小
# 绘制features张量第二列的数据点,并将这些点与labels张量对应的标签关联起来
# scatter函数用来绘制散点图,至少两个参数:x轴和y轴的数据点
# 首先从features张量中选择第二列,.detach()方法用于从当前计算图中分离出这个张量,使其不再参与梯度计算,.numpy()方法将张量转换为NumPy数组,这是matplotlib绘图所需的格式
# features[:, 1]表示features中第二列的所有值组成的一维张量
plt.scatter(features[:, 1].detach().numpy(), labels.detach().numpy(), s=1)
plt.xlabel('Feature')
plt.ylabel('Label')
plt.title('Scatter plot of features vs labels')
plt.show()
结果图: