PyTorch实现Logistic regression

逻辑回归(Logistic regression)

回归方法是对数值型连续随机变量进行预测和建模的监督学习算法。其特点是标注的数据集具有数值型的目标变量。回归的目的是预测数值型的目标值。

逻辑回归对应线性回归,旨在解决分类问题,即将模型的输出转换为0/1值。逻辑回归直接对分类的可能性进行建模,无需事先假设数据的分布。

最理想的转换函数是单位阶跃函数(也称Heaviside函数),但单位阶跃函数是不连续的,没法在实际计算中使用。故而,在分类过程中更常使用对数几率函数(即sigmoid函数):

因此,回归模型为:

将该模型的损失函数定义为:

(其中, y ^ \hat{y} y^表示任意输入一个数据,经过Sigmoid之后这个数据点属于第二类的概率,那么其属于第一类的概率就是 1 − y ^ 1-\hat{y} 1y^;y 表示真实的 label,只能取 {0, 1} 这两个值。)

PyTorch实现逻辑回归

import torch
from torch import nn
from torch.autograd import Variable

#构造数据
n_data = torch.ones(100,2)
x0 = torch.normal(2*n_data)
y0 = torch.zeros(100)
x1 = torch.normal(-2*n_data)
y1 = torch.ones(100)

x = torch.cat((x0,x1)).type(torch.FloatTensor)
y = torch.cat((y0,y1)).type(torch.FloatTensor)

#定义LogisticRegression
class LogisticRegression(nn.Module):
    def __init__(self):
        super(LogisticRegression,self).__init__()
        self.lr = nn.Linear(2,1)
        self.sm = nn.Sigmoid()
        
    def forward(self,x):
        x = self.lr(x)
        x = self.sm(x)
        return x
    
logistic_model = LogisticRegression()
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(logistic_model.parameters(),lr = 1e-3,momentum=0.9)

#训练过程
for epoch in range(10000):
    x_data = Variable(x)
    y_data = Variable(y)
    
    out = logistic_model(x_data)
    loss = criterion(out,y_data)
    print_loss = loss.data.item()
    mask = out.ge(0.5).float()
    correct = (mask == y_data).sum()
    acc = correct.item()/x_data.size(0)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    if (epoch+1)%20 == 0:
        print('*'*10)
        print('epoch {}'.format(epoch+1))
        print('loss is {:.4f}'.format(print_loss))
        print('acc is {:.4f}'.format(acc))

#参数输出
w0,w1 = logistic_model.lr.weight[0]
w0 = float(w0.item())
w1 = float(w1.item())
b = float(logistic_model.lr.bias.item())

print('w0:{}\n'.format(w0),'w1:{}\n'.format(w1),'b:{0}'.format(b))

参考:
https://github.com/KeKe-Li/tutorial/blob/master/assets/src/RAM/RAM.0.3.md
https://blog.csdn.net/qjk19940101/article/details/79573623

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值