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

一、逻辑斯谛回归原理

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

定义:

在线性回归模型的基础上,使用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]])

猜你喜欢

转载自blog.csdn.net/axiaoquan/article/details/127593561
今日推荐