问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

真正弄懂逻辑回归模型,逻辑回归详解

创作时间:
作者:
@小白创作中心

真正弄懂逻辑回归模型,逻辑回归详解

引用
1
来源
1.
https://www.bilibili.com/read/mobile?id=34353585

逻辑回归是应用最为广泛的二分类模型,并且也是进一步学习神经网络等深度学习模型的基础。本文将从什么是线性分类、逻辑回归的算法原理和Pytorch实现逻辑回归三个方面,深度讲解逻辑回归模型。

在本节课中,我将从什么是线性分类、逻辑回归的算法原理和Pytorch实现逻辑回归,这三个方面,深度讲解逻辑回归模型:

1.什么是线性分类

来看下面这个例子:

假设在平面x1-O-x2中,分布着蓝色圆圈表示的正样本与红色叉子表示的负样本。它们有两个特征,x1和x2。其中正样本的标签是y=1,负样本的标签是y=0。接着在平面上画出一条直线,x1+x2-3=0。该直线交x1轴于点(3, 0),交x2轴于点(0, 3)。这时可以观察到,正负两种样本刚好分布在直线的两侧。对于任意的某个样本(x1, x2),如果将该样本向量,代入表达式x1+x2-3:当计算的结果大于等于0时,那么该样本就是正例,计算结果小于0,该样本就是负例。这样我们就通过直线 x1+x2-3=0对样本进行了分类。而这条直线就是这个分类问题的决策边界。当使用一条直线来区分,样本是正例还是负例,那么这就是线性分类问题。逻辑回归算法会训练出一个由直线表示的决策边界,因此逻辑回归是线性分类器。

2.逻辑回归的假设函数

任何机器学习模型,都需要有一个假设函数。我们通过假设函数,来表示输入数据与输出结果之间的关系:也就是将样本的特征向量x,输入至假设函数hθ(x)中,计算出模型的预测结果。逻辑回归的假设函数如下所示:下面我们就基于分类问题本身,来解释逻辑回归的假设函数hθ(x)。设平面上的样本,正例的标记y=1,负例的标记y=0:

也就是将未知样本x输入至逻辑回归,然后模型预测该样本是0还是1。实际上,我们希望逻辑回归的预测结果,也就是hθ(x)的输出,是0到1之间的某个值。这样就可以将预测结果h,看做是样本x属于某个类别的概率了。也就是,当我们发现预测h接近1时,样本x就更可能是正例。h接近0时,x就更可能是负例。具体来说,在使用逻辑回归预测样本的类别时,会提前设置一个阈值p,用来控制分类的界限:

如果将样本x,带入到hθ(x)。输出结果大于等于p,那么就将样本预测为正例,否则是负例。例如,将p设置为0.5。这时如果预测值hθ(x)=0.75,因为0.75>p,那么就会将该样本判断为正例。因此基于这样的考虑,为了使hθ(x)的输出,是0到1之间的某个值,我们引入sigmoid函数:

设sigmoid函数为g(z),它等于1/ 1 + e^(-z)。sigmoid函数的图像,是一个形状像字母S的图形。观察sigmoid函数会发现,自变量z的取值范围是负无穷到正无穷。z趋近于负无穷时,函数值趋近于0。z趋近于正无穷时,函数值趋近于1。并且该函数在z=0的位置左右对称。任意直线的表达式为,θ0+θ1x1+θ2x2+...+θnxn=0。我们将直线的表达式放到z的位置:

此时会得到一个自变量是x1到xn,参数是θ0到θn,值域是0到1的函数hθ(x)。该函数就是逻辑回归的假设函数,它由直线z和sigmoid函数,两部分组成。

3.逻辑回归的代价函数

机器学习模型的代价函数,衡量了模型在训练集上所犯得错误大小。代价函数需要准确的描述样本预测值与真实值之间的误差。在逻辑回归模型中,使用交叉熵损失函数,作为模型的代价函数:我们要求出代价函数J取得最小值时,逻辑回归模型中的参数,θ0到θn,它们的具体值是多少。下面我们具体来说明,为什么逻辑回归的代价函数是交叉熵损失误差:设cost(hθ(x), y)是某一个样本的代价。J(θ)为m个样本的平均代价。在cost函数中,hθ(x)表示样本属于某个类别的预测概率,y是样本的标签。cost函数描述了模型对于一个样本所犯错误的大小。我们希望一个样本的代价cost,有如下性质。当样本是正例时,标记y=1:此时如果预测值h越接近0,那么代价cost就要越大。h越接近1,代价cost就要越小。当样本是负例时,标记y=0:此时如果预测值h越接近0,代价cost要越小。h越接近1,代价cost就要越大。为了实现这样的cost函数,引入log函数。我们将-logx和-log(1-x)两个函数,画在坐标系中:

这两个函数以x=0.5左右对称。接着将自变量x的值,限制在0到1之间:观察函数图像可以发现,蓝色函数在x趋近于0时,函数值趋近于正无穷。x=1时,函数值为0。橙色函数在x趋近于1时,函数值趋近于正无穷。x=0时,函数值是0。如果函数的自变量x,就对应模型的预测值h。那么蓝色函数恰好就可以代表,样本为正例时,代价cost随预测值h的变化。橙色函数则可以表示,样本为负例时,代价cost随预测值h的变化。基于这样的考虑,可以设计出如下cost函数:当y=1时,cost=-log(hθ(x))。当y=0时,cost=-log(1-hθ(x))。cost函数表示了一个样本所犯错误的代价。接着,我们将这两个函数合并为一个:也就是使用hθ(x)、y和log函数,同时表达一个样本的代价值cost。然后再将m个样本的代价值相加到一起,除以m,就得到了逻辑回归的总代价函数J(θ):J(θ)即为为交叉熵损失误差。

4.使用pytorch训练逻辑回归

接下来,我们使用PyTorch深度框架,训练逻辑回归模型:首先来看样本数据的生成:使用make_blobs函数,在平面上生成50个随机样本,包含两个类别。x1和x2分别保存样本的两个特征。然后使用plt.scatter绘制正样本和负样本。其中正样本使用蓝色圆圈表示,负样本使用红色叉子表示:

接着将两个特征x1、x2和标签y,转为张量形式:并定义直线的3个参数,theta0、theta1和theta2。定义Adam优化器optimizer,优化三个θ参数。在参数迭代前,还需要实现逻辑回归的假设函数hθ(x)与代价函数J(θ)的计算方法:具体如下,函数hypothesis,计算逻辑回归模型的预测值hθ(x):函数J,计算预测值h与真实值y的交叉熵损失误差:接着进入逻辑回归模型的循环迭代:在循环中,首先计算模型的预测值h。然后调用函数J,计算预测值h和真实值y之间的损失loss。调用loss.backward,计算loss关于参数θ的梯度。调用optimizer.step,更新模型参数。调用zero_grad,将梯度清零。在迭代过程中,每1000次迭代,打印一次当前的损失:其中loss.item是损失的标量值。运行程序,会看到loss值不断变小。完成训练后,再基于迭代出的参数,绘制出逻辑回归的蓝色决策边界:训练结果如下图所示:

那么到这里,逻辑回归,就讲完了,感谢大家的观看,我们下节课再会。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号