机器学习中 逻辑回归算是回归还是分类

机器学习从入门到放弃之逻辑回归 - Python - 伯乐在线
& 机器学习从入门到放弃之逻辑回归
回到本系列的第一篇文章,在里面有这样的一个问题
黄点代表1类电影的分布,绿色代表0类电影的分布,紫色代表需要分类的电影样本。
那么该怎么判别紫色的那颗点所在的类别呢?
之前给出的是KNN算法,通过计算紫色点都周边的剧场的长短,来判断紫色点属于哪个类别。现在有这样一种极端情况,黄点和绿点在紫点周围呈圆周分布,距离一样,咋办?
图画得不是太好,大家理会我的意思就行。
在这种情况,假如像下图这样的情况,就容易处理得多了。
红线的下方是黄色种类,上方时绿色种类。
这种情况我们称之为线性分类,关于如何拟合出这条线程函数下面会讲述。现在先来说说,既然这叫线性分类,那么必然会有非线性的情况啊,那咋办呢?
没错,如果特征可以被线性函数全部表达,这自然是理想情况,但实际问题中更多的非线性分类。
这时,我们需要将线性函数转换为非线性函数。那怎么转换呢,很简单,将线性函数(假设叫z),扔到某一非线性函数f(x)内,得到新的表达式y = f(z),就是我们所需的非线性分类器了,而f(x)也就作激活函数,它有很多种,本文只介绍逻辑回归所使用到的sigmoid函数,其表达式是
其图像有一个漂亮的S型
可见在x的取值范围足够大的时候,其从0变1的过程可以忽略不计,因此,我们习惯的把&0.5归为1类,归为0类,那么恰好是0.5怎么办?这个概率是极低的,如果真的是0.5,那就随机归类,然后出门买张彩票吧,说不定就不用继续当程序员了。 (/≥▽≤/)
上面函数图像引用
回到表达式上,可知函数的变量是z其余都是常量,所要要求解该分类函数的值,就是要确定z的值而z是线性方程,基本的数学知识不难知道,
其中[x1……xn]是输入向量,所以训练的过程就是确定于[a1,a2……an]的值,使得该表达式对于多个输入向量的输出值正确率最高。
下面开始讲述求最佳的[a1,a2……an]的方法
显然,我们可以设计一个函数来衡量[a1,a2……an]是否最佳,比如说这样的
显然当J(a)达到最小值时,a的值最佳。方法如下,
初始化weight,可以使用随机值
代入式子得到err = y – predict
weight = weight + alpha * error * x_train[i],其中alpha称为学习速率,太小会影响函数的收敛速度,太大刚才就不收敛了。
为了解决上述问题,在《机器学习实战中》使用了动态更新alpha的方法,式子为alpha = 4/(1+i)+0.01
上述修改weight的过程称为梯度下降法,其中我故意略去了数学证明部分,需要的同学请自行查找专业资料。
文章描述如有错误,欢迎指正。
我的个人公众号开启啦,微信公众号搜索肥兔子的碎碎语,你能查看到更多学习心得的分享噢⊙ω⊙。
可能感兴趣的话题
o 149 回复
关于 Python 频道
Python频道分享 Python 开发技术、相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2016 伯乐在线机器学习之——判定边界和逻辑回归模型的代价函数
机器学习之——判定边界和逻辑回归模型的代价函数
判定边界(Decision Boundary)
上一次我们讨论了一个新的模型——逻辑回归模型(Logistic Regression),在逻辑回归中,我们预测:
当h?大于等于0.5时,预测y=1当h?小于0.5时,预测y=0
根据上面的预测,我们绘制出一条S形函数,如下:
根据函数图像,我们知道,当
&z=0时,g(z)=0.5&z&0时,g(z)&0.5&z&0时,g(z)&0.5
以上,为我们预知的逻辑回归的部分内容。好,现在假设我们有一个模型:&并且参数?是向量 :[-3 1 1]。那么当-3+x1+x2大于等于0,即x1+x2大于等于3时,模型将预测 y=1。
我们可以绘制出来x1+x2=3,这条线便是我们模型的分界线,也称之为判定边界(Decision Boundary),将预测为1的区域和预测为0的区域分隔开。
假设我们的数据呈现出如下图的分布情况,那么我们的模型是什么样才能适合这些数据呢?
如上图,函数图像为一个圆,圆点在原点且半径为1,这样一条曲线来分隔开了 y=1 和 y=0 的区域,所以我们需要的是一个二次方特征:
假设参数为 [-1 &0 &0 &1 &1],则我们得到的判定边界恰好是圆点在原点并且半径为1的圆形。
我们可以使用非常复杂的模型来适应非常复杂形状的判定边界。
逻辑回归模型的代价函数(Cost Function)
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上讲,我们也可以沿用这个定义来对逻辑回归模型使用,但是问题在于,当我们将:
代入到这样定义的代价函数中时,我们得到的代价函数将会是一个非凸函数(Non-covex Function)。
这意味着,我们的代价函数将会有许多的局部最小值,这就会影响到梯度下降算法去找寻全局最小值。
因此,我们重新定义逻辑回归的代价函数为:
其中,Cost(h?(x(i), y(i))) 是我们定义的一个代价函数迭代形式,具体表示如下:
h?(x) 与 Cost(h?(x),y)之间的关系是如下图所示:
通过这样构建的Cost(h?(x), y)函数的特点是:
当实际的 y=1 且 h?=1 时,误差为0;当 &y=1 但 h? != 1时,误差随h?的变小而变大;
当实际的 y=0 且 h?=0 时,误差代价为0;当 y=0 但 h? != 0 时,误差随h?的变大而变大。
将构建的Cost(h?(x), y) 进行一个简化,可以得到如下简化公式:
这个简化其实是对上面Cost(h?(x), y) 的两种表达式的一次性结合。
将简化代入到代价函数,得到:
这便是逻辑回归模型的代价函数了。
在得到这样的一个代价函数之后,我们便可以使用梯度下降算法(Gradient Descent)来求得能够使代价函数最小的参数了。
梯度下降算法:
对此求导,得到:
*注:虽然得到的梯度下降算法,表面上看上去和线性回归的梯度下降算法一样,但是这里的h?(x) = g(?TX)与线性回归不同,所以实际上是不一样的。另外,在运行梯度下降算法之前,对特征进行特征缩放(Features Scaling)也是非常必要的。
一些梯度下降算法之外的选择:
除了梯度下降算法之外,还有一些常被用来使代价函数最小的算法,这些算法更加复杂和优秀,而且通常情况下,不需要人工选择学习速率,通常也比梯度下降算法更加快速。举一些例子:共轭梯度法(Conjugate Gradient),局部优化法(Broyden
Fletcher Goldfarb Shann, BFGS)和有限内存局部优化法(LBFGS)。这些算法更加复杂也更加优秀,如果感兴趣我们可以以后再继续讨论。
在Matlab或Octave中,有一个最小值优化函数,fminunc。使用时,我们需要提供代价函数和每个参数的求导,这里给大家举一个例子:
function [ jVal, gradient ] = costFunction( theta )
%COSTFUNCTION Summary of this function goes here
Detailed explanation goes here
jVal = (theta(1)-5)^2 + (theta(2)-5)^2;
gradient = zeros(2,1);
gradient(1) = 2*(theta(1)-5);
gradient(2) = 2*(theta(2)-5);
options = optimset('GradObj', 'on', 'MaxIter', '100');
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
*PS :关于机器学习相关算法的Matlab或Octave代码,我上传到了我的coding.net项目中,有需要的童鞋可以联系我。
我的热门文章
即使是一小步也想与你分享每天三分钟,知晓天下事,视频、语音、文字综合版任您挑!微信搜索fgzadmin关注或点击标题下方可以快速关注。
原创不易,认可价值,动手指点并转发,就是最好的支持与肯定。淘宝特约店址:http://goldengame.
深夜十点,陪你读书。
慢工出细活
由于中、美、俄三国自2008年后基本上长期上演“三国杀”(昨天文章《原创丨中美俄世纪三国杀,谁是百年长跑冠军
其实这是个有奖活动贴。n其实这是个有奖活动贴。n其实这是个有奖活动贴。
思考者正在阅读原创丨三次世界大战亚洲开打,美国推演靠谱吗?原创丨央行连出两大招,有何深意?微历史丨张学良为啥
美国总统奥巴马日在接受媒体采访时表示,2011年对利比亚局势的干涉,是其总统生涯中做出的最
我们都知道,美国软实力很厉害,在过去很多年都一直掌控者国际话语权,他们可以提着民主、自由、人权的大棒满世界乱
思考者正在阅读原创丨重大变革,我们的世界都将逃不过被TA重塑!原创丨中美黄岩岛较量,谁是最后赢家?原创丨你射斯坦福机器学习(5)
& & & & & 斯坦福大学机器学习第四课“逻辑回归(Logistic Regression)”
本次课程主要包括7部分:
1) Classification(分类)
2) Hypothesis Representation
3) Decision boundary(决策边界)
4) Cost function(代价函数,成本函数)
5) Simplified cost function and gradient descent(简化版代价函数及梯度下降算法)
6) Advanced optimization(其他优化算法)
7) Multi-class classification: One-vs-all(多类分类问题)
以下是每一部分的详细解读。
1) Classification(分类)
分类问题举例:
邮件:垃圾邮件/非垃圾邮件?在线交易:是否欺诈(是/否)?肿瘤:恶性/良性?
以上问题可以称之为二分类问题,可以用如下形式定义:
其中0称之为负例,1称之为正例。
对于多分类问题,可以如下定义因变量y:
\[y \in \{0, 1, 2, 3, ..., n\}\]
如果分类器用的是回归模型,并且已经训练好了一个模型,可以设置一个阈值:
如果\(h_\theta(x) \geq 0.5\),则预测y=1,既y属于正例;如果\(h_\theta(x) & 0.5\),则预测y=0,既y属于负例;
如果是线性回归模型,对于肿瘤这个二分类问题,图形表示如下:
但是对于二分类问题来说,线性回归模型的Hypothesis输出值\(h_\theta(x)\)可以大于1也可以小于0。
这个时候我们引出逻辑回归,逻辑回归的Hypothesis输出介于0与1之间,既:
\[0 \leq h_\theta(x) \leq 1\]
注: 以下引自李航博士《》1.8节关于分类问题的一点描述:
分类是监督学习的一个核心问题,在监督学习中,当输出变量Y取有限个离散值时,预测问题便成为分类问题。这时,输入变量X可以是离散的,也可以是连续的。监督学习从数据中学习一个分类模型或分类决策函数,称为分类器(classifier)。分类器对新的输入进行输出的预测(prediction),称为分类(classification).
2) Hypothesis Representation
逻辑回归模型:
上一节谈到,我们需要将Hypothesis的输出界定在0和1之间,既:
0 &=theta(x) &=1
但是线性回归无法做到,这里我们引入一个函数g,
令逻辑回归的Hypothesis表示为:
theta(x) = g(theta^T x) & & &&
这里g称为Sigmoid function或者Logistic function, 具体表达式为:
g(z) = 1/(1+e^(-z) & & & & &
Sigmoid 函数在有个很漂亮的“S&形,如下图所示(引自维基百科):
综合上述两式,我们得到逻辑回归模型的数学表达式:
theta(x) = 1/(1+e^(-\theta^Tx ))
其中theta是参数。
Hypothesis输出的直观解释:
P(theta(x))= 对于给定的输入x,y=1时估计的概率
例如,对于肿瘤(恶性/良性),如果输入变量(特征)是肿瘤的大小:
这里Hypothesis表示的是”病人的肿瘤有70%的可能是恶性的“。
较正式的说法可以如下表示:
给定输入x,参数化的\(\theta\)(参数空间), y=1时的概率。
对于因变量y=0或1这样的二分类问题:
[P(y=0|x;theta) + P(y=1|x;theta) = 1]
[P(y=0|x;theta) = 1 - P(y=1|x;theta)]
3) Decision boundary(决策边界)
如上节所述,逻辑回归模型可以如下表示:
假设给定的阈值是0.5,当(h_theta(x) &=0.5)时, y = 1;
当(h_theta(x) & 0.5)时,y = 0;
再次回顾sigmoid function的图形,也就是g(z)的图形:
当(g(z) &=0.5 时, z &=0;
对于(h_theta(x) = g(theta^Tx) &=0.5), 则(theta^Tx &= 0), 此时意味着预估y=1;
反之,当预测y = 0时,(theta^Tx & 0);
我们可以认为\(\theta^Tx\) = 0是一个决策边界,当它大于0或小于0时,逻辑回归模型分别预测不同的分类结果。例如,
h_theta(x) = g(theta_0 + theta_1 x1 + theta_2 x2)]
theta_0, theta_1, theta_2分别取-3, 1, 1,
则当(-3 + x1 + x2 &=0)时, y = 1; 则(x1 + x2& = 3)是一个决策边界,图形表示如下:
上述只是一个线性的决策边界,当(h_theta(x))更复杂的时候,我们可以得到非线性的决策边界,例如:
这里当(x1^2+ x2^2 &= 1)时,y=1,决策边界是一个圆形,如下图所示:
更复杂的例子,请参考官方PPT,这里就不再举例了。
4) Cost function(代价函数,成本函数)
逻辑回归概览:
逻辑回归是一种有监督的学习方法,因此有训练集:
对于这m个训练样本来说,每个样本都包含n+1个特征:
其中(x in R^(n+1), (x0 = 1, y in {0, 1}).
Hypothesis可表示为:
(h_theta(x) =1/(1+e^(-theta^Tx)) &
与线性回归相似,我们的问题是如何选择合适的参数theta?
Cost Function:
线性回归的Cost& Function定义为:
[J(theta) = 1/sum_{i=1到m}^m{\frac{1}{2}(h_theta(x^(i) - y^(i))^2}\]
这里可以把\(\frac{1}{2}(h_\theta(x^{(i)}) - y^{(i)})^2\)简写为\(Cost(h_\theta(x^{(i)}, y)\),更简化的表达式为:
\[Cost(h_\theta(x), y) = \frac{1}{2}(h_\theta(x) - y)^2\]
如果和线性回归相似,这里取 (h_theta(x) = 1/(1+e^(-\theta^Tx)),会存在一个问题,也就是逻辑回归的Cost Function是“非凸”的,如下图所示:
我们知道,线性回归的Cost Function是凸函数,具有碗状的形状,而凸函数具有良好的性质:对于凸函数来说局部最小值点即为全局最小值点,因此只要能求得这类函数的一个最小值点,该点一定为全局最小值点。
因此,上述的Cost Function对于逻辑回归是不可行的,我们需要其他形式的Cost Function来保证逻辑回归的成本函数是凸函数。
这里补充一段李航博士《》里关于Cost
Function或者损失函数(loss function)的说明,大家就可以理解Cost Function不限于一种方式,而是有多种方式可选,以下摘自书中的1.3.2小节:
监督学习问题是在假设空间F中选取模型f作为决策函数,对于给定的输入X,由f(X)给出相应的输出Y,这个输出的预测值f(X)与真实值Y可能一致也可能不一致,用一个损失函数(loss function)或代价函数(cost function)来度量预测错误的程度。损失函数是f(X)和Y的非负实值函数,记作L(Y, f(X)).
统计学习中常用的损失函数有以下几种:
(1) 0-1损失函数(0-1 loss function):
\[L(Y,f(X)) = \left\{ \begin{array}{ll} 1, & Y \neq f(X)\\0, & Y = f(X)\end{array}\right.\]
(2) 平方损失函数(quadratic loss function)
\[L(Y,f(X)) = (Y - f(X))^2\]
(3) 绝对损失函数(absolute loss function)
\[L(Y,f(X)) = |Y - f(X)|\]
(4) 对数损失函数(logarithmic loss function) 或对数似然损失函数(log-likelihood loss function)
\[L(Y,P(Y|X)) = -logP(Y|X)\]
损失函数越小,模型就越好。
逻辑回归的Cost Function:
基于上节的描述和补充,这里我们选择对数似然损失函数作为逻辑回归的Cost Function:
直观的来解释这个Cost Function,首先看当y=1的情况:
直观来看, 如果y = 1, \(h_\theta(x)=1\),则Cost = 0,也就是预测的值和真实的值完全相等的时候Cost =0;
但是,当\(h_\theta(x) \to 0\)时, \(Cost \to \infty\)
直观来看,由于预测的结果南辕北辙:
如果\(h_\theta(x) = 0\), 也就是预测\(P(y = 1|x; \theta) = 0\),也就是y=1的概率是0,但是实际上y = 1
因此对于这个学习算法给予一个很大的Cost的惩罚。
同理对于y=0的情况也适用:
5) Simplified cost function and gradient descent(简化版代价函数及梯度下降算法)
逻辑回归的Cost Function可以表示为:
由于y 只能等于0或1,所以可以将逻辑回归中的Cost function的两个公式合并,具体推导如下:
故逻辑回归的Cost function可简化为:
对于这个公式,这里稍微补充一点,注意中括号中的公式正是对逻辑回归进行最大似然估计中的最大似然函数,对于最大似然函数求最大值,从而得到参数(\theta\)的估计值。反过来,这里为了求一个合适的参数,需要最小化Cost function,也就是:
\[min_\theta J(\theta)\]
而对于新的变量x来说,就是根据\(h_\theta(x)\)的公式输出结果:
与线性回归相似,这里我们采用梯度下降算法来学习参数\(\theta\),对于\(J(\theta)\):
目标是最小化\(J(\theta)\),则梯度下降算法的如下:
对\(J(\theta)\)求导后,梯度下降算法如下:
注意,这个算法和线性回归里的梯度下降算法几乎是一致的,除了\(h_\theta(x)\)的表示不同。
6) Advanced optimization(其他优化算法)
优化算法:
给定参数\(\theta\),我们可以写成代码来计算:
优化算法除了梯度下降算法外,还包括:
Conjugate gradient method(共轭梯度法)Quasi-Newton method(拟牛顿法)BFGS methodL-BFGS(Limited-memory BFGS)
后二者由拟牛顿法引申出来,与梯度下降算法相比,这些算法的优点是:
第一,不需要手动的选择步长;
第二,通常比梯度下降算法快;
但是缺点是更复杂-更复杂也是缺点吗?其实也算不上,关于这些优化算法,推荐有兴趣的同学看看52nlp上这个系列的文章:,作者是我的师兄,更深入的了解可以参考这篇文章中推荐的两本书:
用于解无约束优化算法的Quasi-Newton Method中的LBFGS算法到这里总算初步介绍完了,不过这里笔者要承认的是这篇文档省略了许多内容,包括算法收敛性的证明以及收敛速度证明等许多内容。因此读者若希望对这一块有一个更深入的认识可以参考以下两本书:
1) Numerical Methods for Unconstrained Optimization and Nonlinear Equations(J.E. Dennis Jr. Robert B. Schnabel)
2) Numerical Optimization(Jorge Nocedal Stephen J. Wright)
7) Multi-class classification: One-vs-all(多类分类问题)
多类分类问题举例:
电子邮件分类/标注: 工作邮件,朋友邮件,家庭邮件,爱好邮件
医疗图表(medical diagrams): 没有生病,着凉,流感
天气:晴天,多云,雨,雪
二类分类问题如下图所示:
多类分类问题如下所示:
One-vs-all(one-vs-rest):
对于多类分类问题,可以将其看做成二类分类问题:保留其中的一类,剩下的作为另一类。例如,对于下面这个例子:
可以分别计算其中一类相对于其他类的概率:
总结-One-vs-all方法框架:
对于每一个类 i 训练一个逻辑回归模型的分类器\(h^{(i)}_\theta(x)\),并且预测 y = i时的概率;
对于一个新的输入变量x, 分别对每一个类进行预测,取概率最大的那个类作为分类结果:
李航博士《》
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:22782次
排名:千里之外
转载:59篇
(1)(1)(1)(6)(5)(1)(2)(1)(1)(8)(11)(25)机器学习中的逻辑回归模型简介 - 文章 - 伯乐在线
& 机器学习中的逻辑回归模型简介
逻辑回归(Logistic Regression)是机器学习中的一种分类模型,由于算法的简单和高效,在实际中应用非常广泛。本文作为美团机器学习InAction系列中的一篇,主要关注逻辑回归算法的数学模型和参数求解方法,最后也会简单讨论下逻辑回归和贝叶斯分类的关系,以及在多分类问题上的推广。
实际工作中,我们可能会遇到如下问题:
预测一个用户是否点击特定的商品
判断用户的性别
预测用户是否会购买给定的品类
判断一条评论是正面的还是负面的
这些都可以看做是分类问题,更准确地,都可以看做是二分类问题。同时,这些问题本身对美团也有很重要的价值,能够帮助我们更好的了解我们的用户,服务我们的用户。要解决这些问题,通常会用到一些已有的分类算法,比如逻辑回归,或者支持向量机。它们都属于有监督的学习,因此在使用这些算法之前,必须要先收集一批标注好的数据作为训练集。有些标注可以从log中拿到(用户的点击,购买),有些可以从用户填写的信息中获得(性别),也有一些可能需要人工标注(评论情感极性)。另一方面,知道了一个用户或者一条评论的标签后,我们还需要知道用什么样的特征去描述我们的数据,对用户来说,可以从用户的浏览记录和购买记录中获取相应的统计特征,而对于评论来说,最直接的则是文本特征。这样拿到数据的特征和标签后,就得到一组训练数据:
其中 \(x^i\) 是一个 \(m\) 维的向量,\(x^i = [x_1^i, x_2^i, & , x_m^i]\) ,\(y\) 在 {0, 1} 中取值。(本文用{1,0}表示正例和负例,后文沿用此定义。)
我们的问题可以简化为,如何找到这样一个决策函数\(y^* = f(x)\),它在未知数据集上能有足够好的表现。至于如何衡量一个二分类模型的好坏,我们可以用分类错误率这样的指标:\(Err = \frac{1}{N} \sum 1[y^* = y]\) 。也可以用准确率,召回率,AUC等指标来衡量。
值得一提的是,模型效果往往和所用特征密切相关。特征工程在任何一个实用的机器学习系统中都是必不可少的,机器学习InAction系列已有一篇文章中对此做了详细的介绍,本文不再详细展开。
sigmoid 函数
在介绍逻辑回归模型之前,我们先引入sigmoid函数,其数学形式是:
\(g(x) = \frac{1}{1 + e ^ {-x}}\)
对应的函数曲线如下图所示:
从上图可以看到sigmoid函数是一个s形的曲线,它的取值在[0, 1]之间,在远离0的地方函数的值会很快接近0/1。这个性质使我们能够以概率的方式来解释(后边延伸部分会简单讨论为什么用该函数做概率建模是合理的)。
一个机器学习的模型,实际上是把决策函数限定在某一组条件下,这组限定条件就决定了模型的假设空间。当然,我们还希望这组限定条件简单而合理。而逻辑回归模型所做的假设是:
\(P(y=1|x;\theta) = g(\theta^T x) = \frac{1}{1 + e ^ {-\theta^T * x}}\)
这里的 \(g(h)\) 是上边提到的 sigmoid 函数,相应的决策函数为:
\(y^* = 1, \, \textrm{if} \, P(y=1|x) > 0.5\)
选择0.5作为阈值是一个一般的做法,实际应用时特定的情况可以选择不同阈值,如果对正例的判别准确性要求高,可以选择阈值大一些,对正例的召回要求高,则可以选择阈值小一些。
模型的数学形式确定后,剩下就是如何去求解模型中的参数。统计学中常用的一种方法是最大似然估计,即找到一组参数,使得在这组参数下,我们的数据的似然度(概率)越大。在逻辑回归模型中,似然度可表示为:
\(L(\theta) = P(D|\theta) = \prod P(y|x;\theta) = \prod g(\theta^T x) ^ y (1-g(\theta^T x))^{1-y}\)
取对数可以得到对数似然度:
\(l(\theta) = \sum {y\log{g(\theta^T x)} + (1-y)\log{(1-g(\theta^T x))}}\)
另一方面,在机器学习领域,我们更经常遇到的是损失函数的概念,其衡量的是模型预测错误的程度。常用的损失函数有0-1损失,log损失,hinge损失等。其中log损失在单个数据点上的定义为\(-y\log{p(y|x)}-(1-y)\log{1-p(y|x)}\)
如果取整个数据集上的平均log损失,我们可以得到
\(J(\theta) = -\frac{1}{N} l(\theta)\)
即在逻辑回归模型中,我们最大化似然函数和最小化log损失函数实际上是等价的。对于该优化问题,存在多种求解方法,这里以梯度下降的为例说明。梯度下降(Gradient Descent)又叫作最速梯度下降,是一种迭代求解的方法,通过在每一步选取使目标函数变化最快的一个方向调整参数的值来逼近最优值。基本步骤如下:
选择下降方向(梯度方向,\(\nabla {J(\theta)}\))
选择步长,更新参数 \(\theta^i = \theta^{i-1}  \alpha^i \nabla {J(\theta^{i-1})}\)
重复以上两步直到满足终止条件
其中损失函数的梯度计算方法为:
\( \frac{\partial{J}}{\partial{\theta}} = -\frac{1}{n}\sum_i (y_i  y_i^*)x_i + \lambda \theta\)
沿梯度负方向选择一个较小的步长可以保证损失函数是减小的,另一方面,逻辑回归的损失函数是凸函数(加入正则项后是严格凸函数),可以保证我们找到的局部最优值同时是全局最优。此外,常用的凸优化的方法都可以用于求解该问题。例如共轭梯度下降,牛顿法,LBFGS等。
知道如何求解参数后,我们来看一下模型得到的最后结果是什么样的。很容易可以从sigmoid函数看出,当\(\theta^T x > 0 \) 时,\(y = 1\),否则 \(y = 0\)。\(\theta^T x = 0 \) 是模型隐含的分类平面(在高维空间中,我们说是超平面)。所以说逻辑回归本质上是一个线性模型,但是,这不意味着只有线性可分的数据能通过LR求解,实际上,我们可以通过特征变换的方式把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。下面两个图的对比说明了线性分类曲线和非线性分类曲线(通过特征映射)。
左图是一个线性可分的数据集,右图在原始空间中线性不可分,但是在特征转换 \([x_1, x_2] => [x_1, x_2, x_1^2, x_2^2, x_1x_2]\) 后的空间是线性可分的,对应的原始空间中分类边界为一条类椭圆曲线。
当模型的参数过多时,很容易遇到过拟合的问题。这时就需要有一种方法来控制模型的复杂度,典型的做法在优化目标中加入正则项,通过惩罚过大的参数来防止过拟合:
\(J(\theta) = -\frac{1}{N}\sum {y\log{g(\theta^T x)} + (1-y)\log{(1-g(\theta^T x))}} +
\lambda \Vert w \Vert_p\)
一般情况下,取\(p=1\)或\(p=2\),分别对应L1,L2正则化,两者的区别可以从下图中看出来,L1正则化(左图)倾向于使参数变为0,因此能产生稀疏解。
实际应用时,由于我们数据的维度可能非常高,L1正则化因为能产生稀疏解,使用的更为广泛一些。
生成模型和判别模型
逻辑回归是一种判别模型,表现为直接对条件概率P(y|x)建模,而不关心背后的数据分布P(x,y)。而高斯贝叶斯模型(Gaussian Naive Bayes)是一种生成模型,先对数据的联合分布建模,再通过贝叶斯公式来计算样本属于各个类别的后验概率,即:
\(p(y|x) = \frac{P(x|y)P(y)}{\sum{P(x|y)P(y)}}\)
通常假设P(x|y)是高斯分布,P(y)是多项式分布,相应的参数都可以通过最大似然估计得到。如果我们考虑二分类问题,通过简单的变化可以得到:
如果 \( \sigma_1 = \sigma_0 \),二次项会抵消,我们得到一个简单的线性关系:
\(\log\frac{P(y=1|x)}{P(y=0|x)} = \theta^T x\)
由上式进一步可以得到:
\(P(y=1|x) = \frac{e^{\theta^T x}}{1+e^{\theta^T x}} = \frac{1}{1+e^{-\theta^T x}} \)
可以看到,这个概率和逻辑回归中的形式是一样的。这种情况下GNB 和 LR 会学习到同一个模型。实际上,在更一般的假设(P(x|y)的分布属于指数分布族)下,我们都可以得到类似的结论。
多分类(softmax)
如果\(y\)不是在[0,1]中取值,而是在\(K\)个类别中取值,这时问题就变为一个多分类问题。有两种方式可以出处理该类问题:一种是我们对每个类别训练一个二元分类器(One-vs-all),当\(K\)个类别不是互斥的时候,比如用户会购买哪种品类,这种方法是合适的。如果\(K\)个类别是互斥的,即 \(y = i\) 的时候意味着 \(y\) 不能取其他的值,比如用户的年龄段,这种情况下 Softmax 回归更合适一些。Softmax 回归是直接对逻辑回归在多分类的推广,相应的模型也可以叫做多元逻辑回归(Multinomial Logistic Regression)。模型通过 softmax 函数来对概率建模,具体形式如下:
\(P(y=i|x, \theta) = \frac{e^{\theta_i^T x}}{\sum_j^K{e^{\theta_j^T x}}}\)
而决策函数为:\(y^* = \textrm{argmax}_i P(y=i|x,\theta)\)
对应的损失函数为:
\(J(\theta) = -\frac{1}{N} \sum_i^N \sum_j^K {1[y_i=j] \log{\frac{e^{\theta_i^T x}}{\sum {e^{\theta_k^T x}}}}}\)
类似的,我们也可以通过梯度下降或其他高阶方法来求解该问题,这里不再赘述。
本文开始部分提到了几个在实际中遇到的问题,这里以预测用户对品类的购买偏好为例,介绍一下美团是如何用逻辑回归解决工作中问题的。该问题可以转换为预测用户在未来某个时间段是否会购买某个品类,如果把会购买标记为1,不会购买标记为0,就转换为一个二分类问题。我们用到的特征包括用户在美团的浏览,购买等历史信息,见下表
购买频次,浏览频次,时间,地理位置 …
销量,购买用户,浏览用户 …
购买频次,浏览频次,购买间隔 …
其中提取的特征的时间跨度为30天,标签为2天。生成的训练数据大约在7000万量级(美团一个月有过行为的用户),我们人工把相似的小品类聚合起来,最后有18个较为典型的品类集合。如果用户在给定的时间内购买某一品类集合,就作为正例。哟了训练数据后,使用Spark版的LR算法对每个品类训练一个二分类模型,迭代次数设为100次的话模型训练需要40分钟左右,平均每个模型2分钟,测试集上的AUC也大多在0.8以上。训练好的模型会保存下来,用于预测在各个品类上的购买概率。预测的结果则会用于推荐等场景。
由于不同品类之间正负例分布不同,有些品类正负例分布很不均衡,我们还尝试了不同的采样方法,最终目标是提高下单率等线上指标。经过一些参数调优,品类偏好特征为推荐和排序带来了超过1%的下单率提升。
此外,由于LR模型的简单高效,易于实现,可以为后续模型优化提供一个不错的baseline,我们在排序等服务中也使用了LR模型。
逻辑回归的数学模型和求解都相对比较简洁,实现相对简单。通过对特征做离散化和其他映射,逻辑回归也可以处理非线性问题,是一个非常强大的分类器。因此在实际应用中,当我们能够拿到许多低层次的特征时,可以考虑使用逻辑回归来解决我们的问题。
Trevor Hastie et al. The elements of statistical learning
Andrew Ng, CS 229 lecture notes
C.M. Bishop, Pattern recognition and machine learning
Andrew Ng et al. On discriminative vs. generative classifiers:a comparison of logistic regression and na?ve bayes
Wikipedia,
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2016 伯乐在线

我要回帖

 

随机推荐