线性回归与逻辑斯蒂回归作对比
模型
损失函数
二分类损失和小批量的二分类损失
编码步骤
写入logistic脚本:
'''
利用pytorch构建模型大多可分为四步:
1、准备数据集
2、模型的构造,定义相应的模型
3、构造损失函数和优化器
4、训练循环
'''
import torch
import torch.nn.functional as F
x_data = torch.Tensor([[1.0],[2.0],[3.0]]) #ctrl+d复制当前行的代码到下一行
y_data = torch.Tensor([[0],[0],[1]]) #逻辑回归其实是分类问题,把输入的数据转化为张量
#逻辑回归其实是分类问题,x对应的y值只能是0或1,LogisticRegressionModel类继承自torch.nn.Module,自动计算梯度
class LogisticRegressionModel(torch.nn.Module):
def __init__(self): #构造函数
super(LogisticRegressionModel,self).__init__() #super继承
self.linear = torch.nn.Linear(1,1) #linear(w,b)
def forward(self,x):
y_pred = F.sigmoid(self.linear(x))
return y_pred
model = LogisticRegressionModel() #实例化模型
criterion = torch.nn.BCELoss(size_average=False) #损失函数,二分类交叉熵损失
optimizer = torch.optim.SGD(model.parameters(),lr=0.01) #定义优化器,随机梯度下降,对model中的参数进行优化,设置学习率
for epoch in range(1000):
y_pred = model(x_data)
loss = criterion(y_pred, y_data) #loss会构建计算图
print(epoch,loss.item())
optimizer.zero_grad() #梯度会累加,需要清零
loss.backward() #损失的反向传播
optimizer.step() #更新
print('w=',model.linear.weight.item()) #打印权重和偏执,位于model中的linear中,去标量值
print('b=',model.linear.bias.item())
x_test = torch.Tensor([[4.0]]) #输入测试的值
y_test = model(x_test) #预测测试的值(概率)
print('y_pred=',y_test.data)
运行结果如下:
迭代100,1000次的结果