利用逻辑斯谛回归实现分类

一、逻辑斯谛回归原理

逻辑斯谛回归是经典的分类方法,它属于对数线性模型,原理是根据现有的数据对分类边界线建立回归公式,以此进行分类。(主要思想)

定义:

在线性回归模型的基础上,使用Sigmoid函数,将线性模型的结果压缩到[0,1]之间,使其拥有概率意义,它可以将任意输入映射到[0,1]区间,实现值到概率转换。

     属于概率性判别式模型

      线性分类算法

Sigmoid 函数满足的性质:1.单调增函数  2、饱和函数 3.函数值有极限,使用符号表示

二、损失函数

逻辑斯谛回归输出的是分布。计算的是的差异。

和等于0的概率。

的概率和等于0的概率。

例:求如下两分布的差异:

        

        

用这个式子表示这连个分布直接的差异

因此损失函数为:

如果y=1     大,则尽量大(越接近1越大)

如果y=0      越小,则接近0

三、代码实现

import torch.nn
#3*1的矩阵
x_data=torch.Tensor([[1.0],
                     [2.0],
                     [3.0]])
#3*1的矩阵
y_data=torch.Tensor([[0],[0],[1]])

#继承类Module,自动会实现反向计算图
class LogisticRegressModel(torch.nn.Module):
    #构造方法
    def __init__(self):
        super(LogisticRegressModel, self).__init__()
        self.linear=torch.nn.Linear(1,1) #类(),构造了一个对象。

    def forward(self, x):
        y_pred=torch.sigmoid(self.linear(x))#对象(),实现了一个可调用的对象
        return y_pred

model=LogisticRegressModel()

criterion=torch.nn.BCELoss(size_average=False)
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)

for epoch in range(1000):
    y_pred=model(x_data)
    loss=criterion(y_pred,y_data)
    print(epoch,loss.item())

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

print('w=',model.linear.weight.item())
print('b=',model.linear.bias.item())

x_test=torch.Tensor([[4.0]])
y_test=model(x_test)
print('y_pred=',y_test.data)



输出:

997 1.1030402183532715
998 1.1024994850158691
999 1.101959466934204
w= 1.1029601097106934
b= -2.6689109802246094
y_pred= tensor([[0.8511]])
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值