赞
踩
逻辑回归是分类当中极为常用的手段,它属于概率型非线性回归,分为二分类和多分类的回归模型。对于二分类的logistic回归,因变量y只有“是”和“否”两个取值,记为1和0。假设在自变量x1,x2,……,xp,作用下,y取“是”的概率是p,则取“否”的概率是1-p
Logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于它们的因变量不同,其他的基本都差不多。正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedlinear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同。这一家族中的模型形式基本上都差不多,不同的就是因变量不同。
在logistic回归的二分类问题中,要用到的函数就是sigmoid函数。sigmoid函数非常简单,它的表达式是:
因变量x取值范围是(-∞,+∞),但是sigmoid函数的值域是(0, 1)。因此不管x取什么值其对应的sigmoid函数值一定会落到(0,1)范围内。它的基本图形如下:
(当z为0的时候,函数值为0.5;随着z的增大,函数值逼近于1;随着z的减小,函数值逼近于0)
解释:将任意的输入映射到[0,1]区间我们在线性回归中得到一个预测值,再将该值映射到sigmoid函数中就完成了一个值到概率的转化,也就是分类任务
其中z=
实际上g(z)并不是预测结果,而是预测结果为正例的概率,一般来说阈值为0.5,也就是当g(z)>0.5,我们就说他是正例,g(z)<0.5就是负例,但在实际应用中也可能不同。比如我们预测一个人是否患有新型冠状病毒,我们这时如果只设置阈值为0.5,那么一个人患有新冠的概率为0.45,我们的模型也会认为他没有新冠,所以这时我们不妨把阈值设置的小一些如0.1,如果概率大于0.1你就要去做检查隔离,这样可以减少误差防止漏放病人。
上述可知:
P(y=0|w,x) = 1 – g(z) #预测为负例
P(y=1|w,x) = g(z) #预测为正例
所以单条预测正确的概率为
P(正确) =*
这里解释一下,yi为某一个样本的预测值,为0或者1
那么为什么P(正确)等于这个呢,你想想,假设我们预测他为1的概率是0.8,预测他为0的概率是0.2。那么这时候如果我们说他是1,那么我们正确的概率就是0.8,如果我们说他是0,那我们正确的概率就是0.2
生成sigmoid函数图的代码:
import numpy import math import matplotlib.pyplot as plt def sigmoid(x): a = [] for item in x: a.append(1.0/(1.0 + math.exp(-item))) return a x = numpy.arange(-10, 10, 0.1) y = sigmoid(x) plt.plot(x,y) plt.yticks([0.0, 0.5, 1.0]) plt.axhline(y=0.5, ls='dotted', color='k') plt.show()
sigmoid函数很适合做我们刚才提到的二分类的分类函数。假设输入数据的特征是(x0, x1, x2, …, xn),我们在每个特征上乘以一个回归系数 (w0, w1, w2, … , wn),然后累加得到sigmoid函数的输入z:
那么,输出就是一个在0~1之间的值,我们把输出大于0.5的数据分到1类,把输出小于0.5的数据分到0类。这就是Logistic回归的分类过程
我们要去寻找一个w的值使得g(z)正确的概率最大,而我们在上面的推理过程中已经得到每个单条样本预测正确概率的公式,若想让预测出的结果全部正确的概率最大,根据最大似然估计,也就是所有样本预测正确的概率相乘得到的P(总体正确)最大,似然函数如下:
对其取对数可以得到:
得到的这个函数越大,证明我们得到的W就越好.此时为梯度上升求最大值,引入j(θ)=(-1/m)L(θ)转化为梯度下降任务,得到公式如下:
这就是其代价函数,也称交叉熵函数
当权向量 w使l(w)最大的时候,w最合理,对代价函数求导可得:
梯度上升法的基本思想是:要找到某函数的最大值,最好的方法就是沿着该函数的梯度方向搜寻。如果函数为f,梯度记为D,a为步长,那么梯度上升法的迭代公式为:w:w+a*Dwf(w)。该公式停止的条件是迭代次数达到某个指定值或者算法达到某个允许的误差范围。首先对对数的函数的梯度进行计算:
通过矩阵乘法直接表示成梯度:
设步长为α, 则迭代得到的新的权重参数为:
例子1:
数据集:学生的gre,gpa和rank信息作为变量,预测是否admit,若admit=1代表录取,admit=0代表不录取
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。