6.逻辑斯蒂模型

简介: 6.逻辑斯蒂模型

逻辑斯蒂模型 用来解决分类问题。

如果第5节的问题是 是否通过,则是一个二分类问题。

得到的输出是通过考试的概率P。概率P在0到1之间。

原来的线性模型输出范围是R (实数),通过逻辑斯蒂函数可以将原来的输出映射到[0,1]范围内。

将线性模型改成逻辑斯蒂模型只要改两处,模型加上sigmod()和损失函数改成BCELoss

完整代码:

import torch
import  torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as plt
 
# 1.准备数据,注意都是矩阵形式
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[0], [0], [1]])
 
 
# 2.设计模型(类) 继承nn.Module 以便使用其方法
class LogisticRegressionModel(torch.nn.Module):
    # 初始化
    def __init__(self):
        super(LogisticRegressionModel, self).__init__()
        self.linear = torch.nn.Linear(1, 1)  # Linear是一个线性单元
 
    # 前馈方法
    def forward(self, x):
        y_pred = F.sigmoid(self.linear(x))  # 实际上调用对象linear的__call__()方法,linear的__call__()方法执行forward前馈
        return y_pred
 
 
model = LogisticRegressionModel()
 
# 3 loss 和 optimizer(优化器)
criterion = torch.nn.BCELoss(size_average=False)  # 不需要求均值
# 优化器。 model.parameters()获取模型中需要优化的参数,lr(learning rate,学习率)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
 
# 4 训练过程
for epoch in range(1000):
    # 前馈
    y_pred = model(x_data)
    # 计算损失
    loss = criterion(y_pred, y_data)
    print("epoch={},loss={}".format(epoch, loss))
 
    optimizer.zero_grad()  # 归零
    # 反向传播
    loss.backward()
    # 更新、优化参数
    optimizer.step()
 
# Test, 查看模型参数及测试训练效果
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = {} for x = {}'.format(y_test.data, x_test.data))
 
#绘图
x = np.linspace(0,10,200)
x_t = torch.Tensor(x).view((200, 1))
y_t = model(x_t)
y = y_t.data.numpy()
plt.plot(x, y)
plt.plot([0,10], [.5,.5], c='r')
plt.xlabel('Hours')
plt.ylabel('Probability of Pass')
plt.grid()
plt.show()
 
 
 
 
 
 
 
 
 
 
 
相关文章
|
6月前
|
机器学习/深度学习 人工智能 算法
声画分离模型PixelPlayer
【2月更文挑战第12天】声画分离模型PixelPlayer
126 5
声画分离模型PixelPlayer
|
3月前
|
SQL Java 数据库
建模底层逻辑问题之ORM框架建模中,执行SQL的过程中被抽象和组织是如何实现的
建模底层逻辑问题之ORM框架建模中,执行SQL的过程中被抽象和组织是如何实现的
|
3月前
|
设计模式
建模底层逻辑问题之以命令设计模式为例,要用定义法建模,如何实现
建模底层逻辑问题之以命令设计模式为例,要用定义法建模,如何实现
|
3月前
|
安全 Java
建模底层逻辑问题之在建模过程中,知识层和操作层如何区分
建模底层逻辑问题之在建模过程中,知识层和操作层如何区分
清水混毒【逻辑题】
清水混毒【逻辑题】
79 0
|
数据采集 安全 程序员
逻辑是个好东西
这些逻辑关系、推导过程与程序中的逻辑结构息息相关。如果你对此不能保持思路清晰,写出的代码很可能与预期有出入,或是在一些特殊情况下存在漏洞。
|
SQL 存储 缓存
第04章_逻辑架构(上)
第04章_逻辑架构
175 0
|
SQL 存储 缓存
第04章_逻辑架构(下)
第04章_逻辑架构
158 0
|
Go 索引
SolrCore getSearcher逻辑回顾
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。
167 0