一.什么是逻辑回归
逻辑回归是一种二分类算法,即寻找一条直线,将两类样本分开(如下图)
二.逻辑回归的过程
既然是寻找一条直线将两类样本分开,那我们定义如下直线
根据直线方程
,则
代表的点在直线的一侧
,则
代表的点在直线的另一侧
好,现在我们的直线已经能把样本点分开了
为了区分两个类别,我们把蓝色的点都记为1,把红色的点都记为0,也就是令
,
,
函数g的结果就是我们对(样本)点的划分结果
但是,我们能明显的看出A,B两点与直线的距离是不同的,如果都记为0的话,这种差异就体现不出来了
所以,大牛们又引入了一种新的g函数——sigmoid函数(函数图像如下)
经过sigmoid函数的映射()
蓝色的点越远离线,就越接近1
不是蓝色(红色)的点越远离线,就越接近0
既然sigmoid的结果为区间(0, 1),那我们是不是可以把它看做是一种概率呢
结果越靠近1,那他是蓝色点的可能就越大
反之,不是蓝色(红色)点的可能就越大
我们现在已经可以很好的把两类样本分开了,但是怎样一条直线才算把样本分开呢
也就是我们要怎样评价这条直线的好坏呢
就像线性回归的平方误差那样,我们这里引入一个东西——交叉熵
其中,y为样本实际的结果(0或1),为直线预测的结果(也就是sigmoid的值)
当y为1的时候1-y=0,只看左半部分,当
越接近1,loss就越小,反之则越大。y为0则同理
也就是说,当预测的概率与实际值相差越大时,损失(loss)会越大
我们想找到一条最好的直线,也就是要最小化loss
然后就可以使用一些最优化的算法(例如梯度下降,adam)去最小化loss
三.寻找分类直线的过程
我们想更新使得loss最小,那我们就慢慢调整
使得loss最小
既然是慢慢的,我们首先要知道改变一点点,loss改变了多少
是不是很像导数,也就是和
(梯度)
我们先回顾一下获取loss的整个过程
用直线将样本点分割在两侧:
经过sigmoid函数后获得"概率":
将预测的概率转化成损失:
——链式求导(复合函数求导)
我们已经知道改变一点点,loss改变多少了
如果采用梯度下降那么的更新方式为:
四.为什么损失用交叉熵
我们把sigmoid所得的值当做概率,那么
一个点是A类的概率
一个点不是A类的概率
将上面两个式子整合
我们使用最大似然估计估算最有可能的
对最大似然取对数
是不是发现和我们的交叉熵就相差一个负号
五.推广到高维
刚才我们讲的一直是二维的点,现在把二维推广到高维
为了简洁,我们使用向量表示,以下的 均为向量
首先定义超平面(直线):
获得分类"概率":
获得损失:
计算梯度:
更新规则:
b则同理:
参考文献
http://cs229.stanford.edu/notes/cs229-notes1.pdf