【深度学习入门】线性回归代码拆解(一):从一行 normal() 到一张散点图

0 阅读2分钟

1.导入库函数

%matplotlib inline
import random
import torch
from d2l import torch as d2l    #字母l

2.生成线性回归的模拟数据

用y=Xw+b计算出理论模拟结果,再加上微小误差使其更接近真实结果

将得到的结果阵列重置成1列,行数不变,用于后续计算

def synthetic_data(w,b,num_examples):            
#Xw+b,X是特征值,w是权重,b是误差,num_examples是样本数量,
    X = torch.normal(0,1,(num_examples,len(w)))   
    #生成原始的特征矩阵, normal()生成正态分布随机数的函数,以0为对称中心,
    标准差是1,num_examples是样本数量(行数),len(w)是权重的数量(列数)
    y = torch.matmul(X,w)+b                    
    #计算Xw+b的理论答案,形成num_examples行1列的样本
    y += torch.normal(0,0.01,y.shape)          
    #生成和y形状一样的误差矩阵,确保每个理论值都能加上对应的误差
    return X,y.reshape((-1,1))              
    #将y变成只有1列的形状,行数不规定
true_w = torch.tensor([2,-3.4])              
true_b = 4.2
features,labels = synthetic_data(true_w,true_b,1000)

3.数据抽样检查

取出第一行的数据,检查数据集的形状是否正确

print('features:',features[0],'\nlabel:',labels[0])    
#分别取出第一条数据,用于检查数据的形状

4.绘制散点图

构建X2和y的关系

d2l.set_figsize()              
#设置画布的尺寸
d2l.plt.scatter(features[:,1].detach().numpy(),labels.detach().numpy(),1)
#features[:,1]表示取出原始数据表格的第二列和所有行,
#.numpy()转换成能绘图的numpy数组,就是1000个样本的第二个特征x2的值作为散点图的x轴坐标
#labels是生成的标签值y,作为散点图的y轴坐标
#1表示散点图的点的大小,散点图体现了x2和y的关系,features表示X,labels表示X*w+b加上微小噪声

5.查看散点图

根据图形可知,x2和y具有负相关性

image.png