对于常规的机器学习算法,一般经历三个步骤:
1. 建模。用数学语言来描述问题,然后建立一个模型。例如回归模型或者分类模型等来描述该问题;
2. 建立代价函数。通过最大似然、最大后验概率或者最小化分类误差等等建立模型的代价函数,也就是一个最优化问题。
3. 求解最优解。通过求解这个代价函数,找到最优解。也就是能拟合我们的数据的最好的模型参数;
建模
考虑二分类任务,其输出标记为0/1,而线性回归模型产生的预测值z = w^T * x是实数,于是我们需要将实数z转换成0/1值,最理想的当然是单位阶跃函数。即若预测值z大于零就判为正例,小于零就判为负例,等于0则可做任意判别。
但是,单位阶跃函数不连续,因此不能作为“广义线性模型”中的联系函数(link function)。于是我们希望能找到一定程度上能近似单位阶跃函数而且单调可微的替代函数,对数几率函数(logistic function)正是这样的一个常用替代函数,y = 1 / ( 1 + e^-z),对数几率函数是一种Sigmoid函数。
其实上述模型可变换为如下广义线性模型:ln y / (1 - y) = z。若将y视为样本x作为正例的可能性,则1-y是其反例可能性,两者的比值反映了x作为正例的相对可能性。
数学推导
假设我们有n个独立的训练样本{(x1, y1) ,(x2, y2),…, (xn, yn)},y={0, 1}。那每一个观察到的样本(xi, yi)出现的概率是:
上面为什么是这样呢?当y=1的时候,后面那一项是不是没有了,那就只剩下x属于1类的概率,当y=0的时候,第一项是不是没有了,那就只剩下后面那个x属于0的概率(1减去x属于1的概率)。所以不管y是0还是1,上面得到的数,都是(x, y)出现的概率。那我们的整个样本集,也就是n个独立的样本出现的似然函数为(因为每个样本都是独立的,所以n个样本出现的概率就是他们各自出现的概率相乘):
现在需要使似然函数最大,有的人可能会有疑问:
最大似然法就是求模型中使得似然函数最大的系数取值θ*。
我们先变换下L(θ):取自然对数,然后化简(不要看到一堆公式就害怕哦,很简单的哦,只需要耐心一点点,自己动手推推就知道了。注:有xi的时候,表示它是第i个样本,下面没有做区分了,相信你的眼睛是雪亮的),得到:
这时候,用L(θ)对θ求导,得到:
然后我们令该导数为0,你会很失望的发现,它无法解析求解。不信你就去尝试一下。逻辑回归学习中通常采用的方法是梯度下降法和牛顿法。
解法及其原理
算法(梯度下降法求解逻辑回归)
输入:目标函数:J(w)(对数似然损失函数),梯度函数:g(w)=∇J(w), 计算精度ϵ
输出:J(w)的极小值点w∗
过程:
正则化
和maxent模型的关系
为啥比线性回归好
并行化方式
开源实现
LR模型发展历史
参考文献
1. 周志华《机器学习》
2. 【机器学习】Logistic Regression 的前世今生(理论篇)
3. 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)