【7】逻辑回归与交叉熵

数据、代码等相关资料来源于b站日月光华老师视频,此博客作为学习记录。

  • 回归:以曲线拟合数据点,表示从输入变量到输出变量之间映射,回归的目的是预测数组型的目标值。
  • 线性回归:根据已知的数据集,通过梯度下降的方法来训练线性回归模型的参数w,从而用线性回归模型来预测数据的未知的类别。
  • 逻辑回归:回归的目标是发现特征与特定结果的可能性之间的联系。给出的是一个“是”或“否”的回答。
sigmoid函数:把任意x映射到0~1之间的概率值。

在这里插入图片描述

逻辑回归损失函数

平方差所惩罚的是与损失为同一数量级的情形,对于分类问题,我们最好的使用交叉熵损失函数会更有效,交叉熵会输出一个更大的“损失”。

交叉熵刻画的是实际输出概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近
假设概率分布p为期望输出,概率分布q为实际输出,H(p,q)为交叉嫡,则:
在这里插入图片描述
在这里插入图片描述
在pytorch中的二元交叉熵损失使用nn.BCEloss()来调用。

实例:
import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from  torch import nn

data = pd.read_csv(r'E:\Code\pytorch\第4章\credit-a.csv', header=None)
# header = None意为没有表头,防止把第一行当成表头

# 前15列是特征,第16列是结果
X = data.iloc[:,:-1]  # 逗号前:表示所有的行,逗号后意思是除最后一列以前的列
Y = data.iloc[:,-1].replace(-1, 0) # 取最后一列作为Y,把里面的-1替换为0

# 数据预处理,转成tensor并且转换成浮点型
X = torch.from_numpy(X.values).type(torch.float32)
# 转成维度为1的数据
Y = torch.from_numpy(Y.values.reshape(-1, 1)).type(torch.float32)

逻辑回归在线性回归的基础上还要再加sigmoid函数,把结果映射成0~1之间的概率值,从而实现二分类。
多个层顺序连接的时候可以使用nn.sequential()方法

# 创建模型
model = nn.Sequential(
    nn.Linear(15,1),   # 输入的形状是15,输出是1
    nn.Sigmoid()
)

打印出来看看:
在这里插入图片描述
接下来初始化损失函数、进行训练:

# 初始化损失函数
loss_fn = nn.BCELoss()
opt = torch.optim.Adam(model.parameters(),lr=0.0001)

# 小批量训练方法:单张训练异常值引起震荡,太多显存吃力
batches = 16 # 设定一个batch大小
num_of_batch = 653//16 # 共653个数据,整除需要训练多少次
epoches = 1000 # 所有数据训练一遍叫一个epoch

# 进行训练
for epoch in range(epoches):   # 每个epoch
    for i in range(batches):   # 每个batch
        start = i*batches # 第几个batch都乘以固定的16作为起点
        end = start + batches # 起头+16就是结尾
        x = X[start:end]
        y = Y[start:end]
        y_pred = model(x)
        loss = loss_fn(y_pred,y)  # 计算loss
        opt.zero_grad()  # 梯度置零
        loss.backward()  # 反向传播
        opt.step()       # 迭代优化

通过print(model.state_dict())可以查看model的参数:
在这里插入图片描述
计算准确率

accurate = ((model(X).data.numpy() > 0.5).astype('int') == Y.numpy()).mean()
print(accurate)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

要努力的小菜鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值