06.Logistic实现二分类

一、概念:

对于之前的线性问题转化成分类问题:如果不再预测学习4小时可以得到的成绩,而是判断学习4小时是否可以通过考试。

线性回归模型的模型损失

成为一种概率,引出了sigmoid函数,将y带入x即可。

计算某输入属于某一输出的概率的最大值

σ函数:保证输出值在0~1之间

损失函数称为:BCE Loss(Cross Entropy 交叉熵)

具体流程:

二、代码:

import torch

# 准备数据集
x_data = torch.Tensor([[1.0], [2.0], [3.0]])  # 输入数据,形状为(3, 1),表示有3个样本,每个样本有1个特征
y_data = torch.Tensor([[0], [0], [1]])      # 目标标签,形状为(3, 1),表示每个样本的标签

# 设计网络模型
class LogisticRegressionModel(torch.nn.Module):
    def __init__(self):
        super(LogisticRegressionModel, self).__init__()
        self.linear = torch.nn.Linear(1, 1)  # 创建一个线性层,输入维度为1,输出维度为1,对应模型的权重和偏置

    def forward(self, x):
        y_pred = torch.sigmoid(self.linear(x))  # 使用 sigmoid 函数将线性层的输出转换为概率
        return y_pred
model = LogisticRegressionModel()  # 创建模型的实例

# 构建损失函数和优化器
criterion = torch.nn.BCELoss(reduction='sum')  # 二元交叉熵损失函数,用于度量预测值和实际标签之间的误差
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降优化器,用于更新模型的权重和偏置

# 训练循环
for epoch in range(2000):  # 迭代2000次,每次迭代称为一个"epoch"
    y_pred = model(x_data)  # 使用模型进行前向传播,得到预测值
    loss = criterion(y_pred, y_data)  # 计算损失,衡量预测值和实际标签之间的差异

    optimizer.zero_grad()  # 清零梯度,防止梯度累积
    loss.backward()  # 反向传播,计算梯度
    optimizer.step()  # 更新模型参数,执行一步优化

# 测试模型
x_test = torch.Tensor([1.0])  # 创建一个测试输入
y_test = model(x_test)  # 使用训练好的模型进行测试,得到预测值
print("y_pred = ", y_test.data)  # 打印预测结果
import numpy as np
import matplotlib.pyplot as plt

'''
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
在指定的间隔内返回均匀间隔的数字。
返回num均匀分布的样本,在[start, stop]。
这个区间的端点可以任意的被排除在外。
'''
x = np.linspace(0,10,200)   #在0~10中,均匀取出200个点
# print(x)
x_t = torch.Tensor(x).view(200,1)  #将200个点变成(200,1)的张量
# print(x_t)
y_t = model(x_t)  #得到y_pred_t是个张量
# print(y_t)
y = y_t.data.numpy() #将y_pred_t张量转化为矩阵形式
# print(y)
plt.plot(x,y)
plt.plot([0,10],[0.5,0.5],c='r')
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()
plt.show()

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值