(由于平台稿件格式问题,公式格式不能正确写上;如若读写困难可后台私信我要完整电子版)
线性回归是指特征 x 通过模型运算得到预测值 y^'。在理论上,y^' 的取值范围是 (-∞,+∞),即 y^' 可以是任何值,例如销量、价格、负债等。
在回归任务中,有一类特殊场景值得注意,就是预测概率。概率可用于解决分类问题。在这类场景中,模型的输出是输入样本属于某个类别的概率。例如,输入的是用户消费习惯和商品特征等信息,输出的概率 p 表示用户是否会购买商品。再如,输入的是一幅图片,输出的概率 p 表示该图片是否包含人脸。
我们知道,概率的取值范围是 [0,1],因此,模型输出的范围要在此区间之内,在此区间以外的预测是没有实际意义的。预测概率是一个非常普遍的场景,如图3-1所示。分类问题大都属于预测概率。例如,输入一幅图片,模型能够计算出图片中包含一只猫、一条狗或二者都不是的概率,从而完成分类。
图3-1
在图3-1中,P_1、P_2、P_3 分别表示模型判断输入 x 属于猫、狗、二者都不是的概率。根据概率的定义和性质,有 P_1∈[0,1]、P_2∈[0,1]、P_3∈[0,1] 且 P_1+P_2+P_3=1。
分类问题的特殊之处在于,其输出要有明确的取值范围 [0,1] 和物理含义(概率),这一点和回归任务(值域为 (-∞,+∞))不尽相同。由于分类问题在人工智能场景中有丰富的应用,因此得到了专门的处理和优化。
在分类问题中,二分类是一个简单但应用广泛的场景。假设有P和N两个类别,y 表示P类的概率,1-y 表示N类的概率,而在训练样本中,样本的类别都是客观存在的,不存在随机性,因此 y=1 或 y=0。值得注意的是,二分类的两个类别必须完全互斥并包含所有情况。例如,二分类的两个类别可以是“狗”和“非狗”,但不可以是“狗”和“猫”。
在二分类场景中,模型只需要一个输出 y^'。如果 y^' 表示输入 x 属于P类的概率,那么 x 属于N类的概率自然就是 1-y^'。模型的输出 y^'∈[0,1] 不再局限于一个二值选择,可以是一个属于0~1的连续值,以表示模型判断的概率结果。
在机器学习数十年的发展过程中,出现了很多分类模型,其中就包括逻辑回归。逻辑回归作为二分类问题的一个经典模型,是神经网络学习的基础,因此,我们有必要对其进行系统的学习和研究。
通过对第2章的阅读,相信读者已经对线性回归有所了解。当训练完成时,可以得到一个用于预测的函数
y^'=w^T x+w_0
通过该函数,可以对输入进行输出值的计算。
线性回归和分类任务相悖的地方在于,线性回归输出的值域为 (-∞,+∞),而这超出了概率的取值范围 [0,1]。
不过,问题还是有办法解决的。例如,对输出进行改造,对线性回归的输出进行判断。如果 w^T x+w_0 ≥ 0,就认为 x 属于P类的概率为 y^'=1;如果 w^T x+w_0<0,就认为 x 属于P类的概率为 y^'=0。改造后的模型函数如下。
函数图像如图3-2所示。
图3-2
上述模型虽然能够满足分类的需求,但仍存在一些问题,其中,以下两个比较重要。
很明显,这种曲线的缺点是判断太“硬”、太绝对、非黑即白,无法体现输入 x 与两个类别的相似程度。在很多应用场景中,用户都倾向于得到一个能够反映程度的值,而非简单的1或0。例如,属于P类的概率为0.75,属于N类的概率为0.25,这种结果是无法通过上述模型得到的。事实上,所有的分类都属于“抽刀断水”,并不存在绝对性。
上述模型在 d=0 这一点的导数 (∂y^')/∂d 不存在,当 d≠0 时导数 (∂y^')/∂d=0。现在的主流学习方法仍然是梯度下降法,当导数不存在或为0时,w 无法得到更新,而这会导致学习失效。
既然发现了问题,就要解决问题。人工智能先驱们经过努力,找到了逻辑函数(Logistics Function),如下式所示。
f(d)=1/(1+e^(-d) )
逻辑函数的图像,如图3-3所示。
图3-3
逻辑回归的导数为 ∂f/∂d=f(d)(1-f(d)),其图像如图3-4所示。
图3-4
与之前过“硬”的方案相比,这个函数的特点如下。
值域为 [0,1],不仅满足了概率值域的约束,也可以输出0.75、0.6这类相对比较“软”的概率值。
处处都有导数且都不为0,保证了梯度下降法的可操作性。
因此,我们用逻辑函数代替条件判断,将线性回归改造成分类模型,公式如下。
其中
上述模型就是逻辑回归(Logistic Regression,LR),即加载逻辑函数的线性回归。在这里,d 实际上是一个线性回归,输出概率 y^' 随着 d 的增大而增大且趋近于1;反之,y^' 随着 d 的减小而减小且趋近于0。
在预测阶段,我们可以设一个阈值 θ(通常可以取0.5)。当模型输出 y^'>θ 时,认为输入的样本 x 属于P类;当模型输出 y^'<θ 时,认为输入的样本 x 属于N类;当模型输出 y^'=θ 时,认为输入的样本 x 位于两个类别的临界点。
假设有一种自动诊疗仪,输入 x 为人的一些生理指标,用逻辑回归判断就诊者是否患有癌症。如果诊疗仪判断就诊者患有癌症,则由医生对病人进行会诊,否则就诊者可以结束就诊。模型输出P类表示患有癌症,N类表示未患癌症,这就是一个典型的二分类问题。在这个场景中,宁可让模型错误地把一个健康的人判断为癌症患者(再由医生做进一步检查和判断),也不要出现漏判——因为在这两个类别上,错分(“假阴”和“假阳”)的代价是不一样的。这时可以适当降低阈值 θ,例如 θ=0.3。这样,模型输出为 y^'=0.4、y^'=0.35 的就诊者就会被诊疗仪判断为患有癌症,由医生进行进一步的会诊,以免遗漏。
当 θ=0.5 时,表示对P类和N类没有特殊的偏好。当 θ<0.5 时,反映了对于分类结果为P类的“宁错勿漏”。当 θ>0.5 时,判断输入 x 为P类是更加严格的,表示“宁缺毋滥”。需要强调的是,模型输出 y^' 是一个客观数字,但阈值是使用者主观设定的。
在一些场景中,阈值 θ 也不是必需的。例如,在推荐系统中,我们用逻辑回归预测用户是否会对商品进行点击。假设有100件候选商品,在一个页面上只能展示10件给用户,此时需要使用逻辑回归分别对这100件商品进行预测打分,然后将得分排在前10位的商品展示给用户。这些分数可能整体偏低,也就是“矮子里拔将军”,或者整体偏高,即“优中选优”。
接下来,我们看一个更有意思的例子。如果输入是2维的,即 x=〖[x_1,x_2]〗^T,逻辑回归模型如下。
y^'=1/(1+e^(-d) )=1/(1+e^(-d) )
d=w_1 x_1+w_2 x_2+w_0
此时,可以在坐标系中画出数据点,其中横坐标为 x_1,纵坐标为 x_2,如图3-5所示。
图3-5
当 d=0 时,y^'=0.5。当 θ=0.5 时,w_1 x_1+w_2 x_2+w_0=0 对应于坐标系中的一条直线,这条直线称为分界线。
如果数据点(椭圆形点)位于分界线左上方区域,则将这些数据点代入直线方程,可得
d=w_1 x_1+w_2 x_2+w_0>0
由此可以推导出 y^'>0.5>θ,意味着这些数据点的分类结果都为P类。
同理,当数据点位于分界线右下方区域时,d<0,即 y^'<0.5<θ,这些数据点的分类结果都为N类。
进一步,当 d>0 时,d=10 和 d=100 的区别在于数据点与分界线距离的远近不同(d=10 时离分界线近),体现在分类结果为P类的概率和 d 的关系上,如图3-6所示。d<0 时的情况同理。
图3-6
结合图3-5和图3-6可以看出,数据点离分界线越远,它所对应的概率值就越大,分类结果就越可信。
在本节的最后,我们一起讨论一个多分类问题。在实际应用中有很多分类场景。例如,我们要预测一首歌的类型(例如摇滚乐、流行乐、爵士乐等),该怎么使用逻辑回归呢?对
多分类问题,可以使用多个分类器 h_1,h_2,⋯,h_k,k 为类别数量。其中,h_j 表示二分类模型
的逻辑回归模型,用于判断样本 x 属于第 j 类的概率。在训练阶段,第 j 类的样本属于P类,其他样本都属于N类。这种多分类方法称为OvR(One-vs-Rest)。样本 x 的类别为
(arg max)┬j〖h_j (x)〗
也就是说,取 k 个分类模型中输出值最大的模型所对应的类别作为多分类结果。
因为在使用OvR进行多分类时不需要类别互斥,所以不必满足 ∑_(j=1)^k▒〖h_j (x)=1〗。假设一
首歌可以同时属于摇滚乐和流行乐,那么对应的 h_流行乐 和 h_摇滚乐 的输出值都比较大。因此,
OvR也可用于多标签/多类别问题,即“一个样本可以属于多个分类”。此时,有 Class(x)=
{j|h_j (x)>θ_j},θ_j 是为各类别独立设置的阈值。
所谓分类,其实都是人主观设定的标准,不存在客观的分类标准,这就是所谓丑小鸭定理(Ugly Duckling Theorem)。丑小鸭定理是1969年由渡边慧提出的。丑小鸭是白天鹅的幼雏。尽管在常人的眼里,丑小鸭和白天鹅的区别大于不同白天鹅之间的区别,但在遗传学家的眼里,丑小鸭与其父亲或母亲的差别小于其父母之间的差别。正因为没有客观的分类标准,所以分类模型需要通过标注数据来明确类别的种类。标注数据的不同会导致模型不同的分类结果。
假设:在第一个场景中,需要区分一种生物是否为水产品,那么此时螃蟹和鱼属于同一类别;在第二个场景中,需要区分一种生物是否为脊椎动物,那么此时螃蟹和鱼就不属于同一类别了。这种类别信息都是通过数据标注告诉模型的。如果需要模型很好地区分类别,那么提取的特征也需要进行相应的修改。在第一个场景中,提取的特征为鱼和螃蟹的共性,例如水生、蛋白质含量高;在第二个场景中,应提取有无脊柱之类的特征。
在3.1节中,我们分析了将逻辑回归应用在分类任务中的一些性质和优点。一个问题随之出现了:如何学习参数 W?逻辑回归的参数求解仍然采用线性回归中使用的梯度下降法,但使用的损失函数不是MSE。
在线性回归中,误差函数MSE其实是表示预测值与真实值之间的欧氏距离。然而,欧氏距离并不适合用来度量概率之间的差异(本章最后会详细讨论这个问题)。在概率计算中,一般采用KL(Kullback-Leibler)距离来度量不同概率分布之间的差异。在计算离散概率时,KL距离的计算公式如下。
对于连续型概率,可以把 Σ 替换成 ∫,把 P 和 Q 替换成概率密度。
如果概率分布 P 和 Q 处处相等,那么 P 和 Q 这两个概率分布就是形同的,即对于
所有 y∈Y 都有 P(y)=Q(y),也就是说 log (P(y))/(Q(y))=log1=0,此时KL距离为0。反之,
概率分布的差异越大,KL距离就越大。值得注意的是,与欧氏距离满足交换性不同,KL距离并不具备交换性,即
KL(P,Q)≠KL(Q,P)
因此,严格来说,KL距离不能完全满足距离条件。
逻辑回归一般用于解决二分类问题,此时 y∈{0,1}。先看看训练样本 x_((i)),y_((i)),y_((i)) 表示样本属于P类的概率,1-y_((i)) 表示样本属于N类的概率。因为训练样本的数据是一个确定事件,所以 y_((i))=1 或 y_((i))=10。y_((i))^' 表示模型预测为P类的概率,〖1-y〗_((i))^' 表示模型预测为N类的概率。
因为只有两个类别,所以将 ∑_(y∈{0,1})^ ▒〖y_((i)) log y_((i))/(y_((i))^' )〗 展开成两项。此时,真实的概率分布和
模型输出的概率分布之间的差异可以用KL距离表示成
KL(y_((i)),y_((i))^' )=y_((i)) log y_((i))/(y_((i))^' )+(1-y_((i)))log 〖1-y〗_((i))/(〖1-y〗_((i))^' )
在本书中,为了求导方便,采用以 e 为底的对数函数,即 logy=lny。
使用KL距离的目的是量化模型输出概率和真实概率之间的差异,并通过改变参数 w 使KL距离变小,因此,我们只需要关注与参数 w 有关的项。
对 y_((i)) log y_((i))/(y_((i))^' ) 进行变换,公式如下。
y_((i)) log y_((i))/(y_((i))^' )=y_((i)) logy_((i))-y_((i)) logy_((i))^'
上式的第一项 y_((i)) logy_((i)) 中的 y_((i)) 表示输入的真实类别,它是客观存在的,和参数 w 没有关系,也就是说,改变 w 不会对 y_((i)) 产生任何影响。因此,可以忽略 y_((i)) logy_((i)),即
y_((i)) log y_((i))/(y_((i))^' )=y_((i)) logy_((i))-y_((i)) logy_((i))^'⇒-y_((i)) logy_((i))^'
同理,可以忽略 〖(1-y〗_((i)))log〖(1-y〗_((i))),即
(1-y_((i) ) )log 〖1-y〗_((i) )/(〖1-y〗_((i))^' )⇒-(1-y_((i)))log(1-y_((i))^')
因此,在逻辑回归中,对于训练样本 x_((i)),y_((i)),KL距离的计算公式可以化简为
Loss_((i))=KL(y_((i)),y_((i))^' )=-y_((i)) logy_((i))^'-(1-y_((i)))log(1-y_((i))^')
其中,y_((i))^' 为逻辑回归模型的输出
y_((i))^'=f(x_((i)) )=1/(1+e^(-(w^T x_((i))+w_0)) )
值得注意的是,Loss_((i)) 虽然是由两项组成的,但因为 y_((i)) 只能取1或0,所以对一个具体的训练样本来说,这两项有且仅有一项不为0。
当真实类别 y_((i))=1 时,Loss_((i))=-logy_((i))^'。因此,最小化 Loss_((i)) 相当于最大化 y_((i))^',即模型的输出越接近1,Loss_((i)) 就越小。
当真实类别 y_((i))=0 时,Loss_((i))=-log(1-y_((i))^')。因此,最小化 Loss_((i)) 相当于最小化 y_((i))^',即模型的输出越接近0越好。
上面的分析符合我们的认知和期望。需要注意的是,由 y_((i))^' 的计算公式可知,y_((i))^' 只能无限接近1或0(但无法达到),因此 Loss_((i)) 没有极小值。这一点和线性回归中使用的MSE不同。当考虑所有训练样本 〖{x_((i) ),y_((i))}〗_(i=1)^N 时,损失函数为所有样本上的平均误差
Loss=1/N ∑_(i=1)^N▒Loss_((i)) =1/N ∑_(i=1)^N▒〖-y_((i)) logy_((i))^'-(1-y_((i)))log(1-y_((i))^')〗Loss=1/N ∑_(i=1)^N▒Loss_((i)) =1/N ∑_(i=1)^N▒〖-y_((i)) logy_((i))^'-(1-y_((i)))log(1-y_((i))^')〗
需要注意的是,尽管 Loss_((i)) 没有极小值,但 Loss 可能有极小值。
在3.2.1节中,我们使用KL距离作为损失函数。损失函数确定后,仍然使用梯度下降法求解参数 w。因为逻辑回归就是在线性回归上套了一层逻辑函数,所以逻辑回归是一个复合函数。对复合函数求导,可以采用链式法则。
先看只有一个样本 x_((i)),y_((i)) 的情况,模型预测的结果为
y_((i))^'=1/(1+e^(-(w^T x+w_0)) )
根据链式法则,(∂Loss_((i)))/∂w 可以有如下等价变换。
(∂Loss_((i)))/∂w=(∂Loss_((i)))/(∂y_((i))^' )∙(∂y_((i))^')/∂d∙∂d/∂w
其中
(∂Loss_((i) ))/(∂y_((i))^' )=-y_((i) )/(y_((i))^' )+(1-y_((i) ))/(1-y_((i))^' )
(∂y_((i))^')/∂d=y_((i))^' (1-y_((i))^' )
∂d/∂w=x_((i))
将上述三式代入并化简,可得
(∂Loss_((i)))/∂w=(y_((i))^'-y_((i)))x_((i))
同理,可得
(∂Loss_((i)))/(∂w_0 )=(y_((i))^'-y_((i)))
考虑所有训练样本 〖{x_((i) ),y_((i) )}〗_(i=1)^N,有
∂Loss/∂w=1/N ∑_(i=1)^N▒(∂Loss_((i) ))/∂w=1/N ∑_(i=1)^N▒〖(y_((i))^'-y_((i) ) ) x_((i) ) 〗
∂Loss/(∂w_0 )=1/N ∑_(i=1)^N▒(∂Loss_((i)))/(∂w_0 )=1/N ∑_(i=1)^N▒〖(y_((i))^'-y_((i)))〗
和线性回归一样,我们在使用梯度下降法求解 w 和 w_0 时,可以通过以下步骤进行迭代学习。
随机初始化 w 和 w_0,记为 w(0) 和 w_0 (0)。此时 t=0(t 表示迭代次数)。
求当前点的梯度,公式如下。
∂Loss/∂w(t) =1/N ∑_(i=1)^N▒〖(y_((i))^'-y_((i) ) ) x_((i) ) 〗
∂Loss/(∂w_0 (t))=1/N ∑_(i=1)^N▒〖(y_((i))^'-y_((i)))〗
更新参数,公式如下。
w(t+1)=w(t)-μ ∂Loss/∂w(t)
w_0 (t+1)=w_0 (t)-μ ∂Loss/(∂w_0 (t))
当 t 等于指定迭代次数或 Loss 足够小时,迭代结束,此时得到的 w 和 w_0 就是学习后的参数。如果迭代不满足结束条件(t=t+1),则返回第步,进行下一轮学习。
与线性回归的学习步骤相比,除了第步求导的形式不一样,其他都是一样的。这就是梯度下降法的好处——相当于提出了一个学习框架,不同类型的模型只需要求出自己相应的梯度即可,其他步骤都可以复用。
在真实场景中,训练数据属于P类和N类的样本数量往往是不平衡的,这种情况在企业中是常态。
例如,在做视频点击率预测(Click Through Rate,CTR)时,P类为用户点击,N类为用户不点击,输入 x 为用户和视频的一些基本信息(例如用户年龄、观看历史、视频类型、视频长度等),我们需要通过模型预测用户是否会对某个视频产生点击行为,将点击概率高(P类)的视频推送给用户。
这类问题一般会将以往的曝光点击日志作为训练样本。例如,分析昨天的日志,将曝光给用户但没有被点击的“用户—视频”划入N类,将曝光给用户并被点击的“用户—视频”划入P类。显然,大多数视频是不会被点击的。一般来说,推荐视频的用户点击率为15% 已经是很好的成绩了。因此,N类的样本数量远大于P类的样本数量,甚至可能达到P类样本100个、N类样本10000个的程度。如果用这些数据直接训练逻辑回归模型,则 Loss 大都由N类决定,因此 w 的更新受N类的影响较大。这样,w 的值会随属于N类的样本的变化而变化。最终,只要N类预测正确,就能得到一个很小的 Loss,而P类的数据正确与否影响很小。举个极端的例子,把所有样本都预测为N类,正确率仍然是 10000/10100=99%,但这种模型是没有用的,因为我们真正关心的P类全都被预测错了。在这种情况下训练出来的模型是有偏的,即模型只需要在N类上预测正确,就能使 Loss 降得很低,而在P类上是否预测正确只会对 Loss 产生微弱的影响(几乎没有影响)。
我们可以从另一个角度分析样本不平衡带来的影响。在训练阶段,每个样本 i 都会对参数 w 产生影响。为了使预测结果更准确(属于P类时无限接近1,属于N类时无限接近0),提升概率的方法就是让分类线远离自己。因此,每个点都会把分类线朝远离自己的方向推,如图3-7所示。
图3-7
此消彼长,最终的分类线就是在训练样本中达到平衡时的结果。但是,如果两个类别是不平衡的,例如N类的样本数量远大于P类的样本数量,那么在推直线时,N类的“力道”明显更大,直线会被推成如图3-8所示的样子。此时,训练出来的分类线不再位于中间,而是紧挨着训练样本中的P类。在这种情况下,训练出来的分类线对测试集中P类样本的预测结果基本上是错的,模型的泛化能力很差。
图3-8
综上所述,从训练阶段到预测阶段,样本不平衡都会给模型带来负面影响。要想平衡样本,即让P类和N类样本的数量差不多(平滑样本),有如下方法。
上采样技术:复制P类样本,最终使P类和N类样本的数量相同。
下采样技术:随机抽取部分N类样本作为训练样本,使N类和P类样本的数量大致相同。
上采样技术和下采样技术都能解决样本不平衡问题。在机器性能允许的情况下,一般使用上采样。与下采样相比,上采样能保证数据的多样性。使用下采样技术,需要抛弃一些属于N类的样本,数据的多样性将会降低。如果两个类别的训练样本的数量差异过大,则可以对数量较大的类别进行下采样,对数量较小的类别进行上采样,最终使两个类别样本的数量相同。当面对海量数据时(例如广告、推荐等场景),为了提高模型的训练速度,也经常会使用负采样。
如果数据点所对应的类别在平面(空间)上可以被一条直线分开,就称这些数据点是线性可分的。当数据点线性可分时,使用逻辑回归可以很好地对数据的类别进行预测。然而,在很多时候,数据点是线性不可分的,如图3-9所示。
图3-9
其中,三角形为一个类别,圆形为另一个类别。此时,无论怎么画直线,都无法把数据点准确地分开(读者可以自己尝试)。这类问题就是线性不可分问题。特别地,这类问题也称为异或问题,即 y=x_1 或 y=x_2。
逻辑回归的本质是在平面上画直线,从而对数据点进行分割。因此,我们很容易就能知道,逻辑回归是解决不了线性不可分问题的,这表现在训练时损失函数总是一个较大的值上(因为有错误的分类点)。
为了在线性不可分的情况下提高逻辑回归的准确率,可以对特征进行扩充。采用增加特
征维度方法,将原来的数据点 x=[■(x_1@x_2 )] 增加1维,变成 x=[■(x_1@x_2@x_3 )],其中 x_3=x_1 x_2。此
时,就可以用一个平面(二维空间中的直线相当于三维空间中的平面)将属于两个类别的数据点分开了。数据点在空间中的分布,如图3-10所示。
图3-10
模型如下式所示。
如果将 x_1 x_2 作为一个新特征,那么模型在三维空间中仍然是线性的逻辑回归模型。从另一个角度,可以将 x_1 x_2 看成一个二次项,模型相当于二维空间中的非线性模型,分割线为双曲线,如图3-11所示。
图3-11
在实际项目中,大多数问题都是线性不可分问题,因此,可以按照上面的方法实现大量的特征工程,提高特征的组合数量和维度,从而提升逻辑回归的分类能力。但是,在高维空间中,数据分布异常复杂且特例较多,即使实现了特征工程,也无法使数据完全线性可分。这也没关系,因为没有哪个模型能够做到100% 准确。如果特征维度过高而训练样本数量较少且模型在训练集上做到了100% 准确,模型反而容易发生过拟合,即在测试集上效果不佳。
前面分析过,单个样本 x_((i)) 的损失函数 Loss_((i)) 没有最小值。下面我们分析一下整体损
失函数 Loss=1/N ∑_(i=1)^N▒Loss_((i)) 。
如果数据点是线性可分的,那么每个数据点都会被正确地分类,此时 Loss 没有最小值。例如,成倍放大 w 可以使数据点的概率相应增大(P类的模型输出趋近于1,N类的模型输出趋近于0),从而使 Loss 的值相应减小,因此需要提前终止学习。如果数据本身是线性不可分的,就会出现数据点被错误预测的情况,此时放大 w 会减小正确的数据点 i 的 Loss_((i))、
增大错误的数据点 j 的 Loss_((j))——此消彼长——因此 Loss 有最小值。
如3.3节所述,逻辑回归的几何含义就是在平面上找到一条分类线 w^T x+w_0=0。值得注意的是,平面上的同一条直线其实可以由无数组方程来表示。例如,下面两个方程对应的是同一条直线。
0.6x_1+0.4x_2+0.2=0
6x_1+4x_2+2=0
那么,这两个对应于同一条直线的方程表达的意思是否有区别呢?如果有区别,哪个更好呢?
虽然以上两个方程在平面上对应于同一条直线,但是,将运算结果分别代入逻辑回归函数,得到的概率是不同的,即对应于不同的输出 y^'。将数据点 (1,1) 代入第一个方程,可得
y^'=1/(1+e^(-(0.6+0.4+0.2)) )≈0.77;将数据点 (1,1) 代入第二个方程,可得 y^'=1/(1+e^(-(6+4+2)) )≈1.000。
一般来说,我们不希望 w 过大。w 过大主要有以下三个缺点。
w 过大会放大 〖d=w〗^T x+w_0(d 趋近于非常大的正数或非常小的负数),这样逻辑回归的预测值将趋近于0或1,模型的输出结果过“硬”,区分度不高。y^' 挤在0或1附近,几乎没有区分度,从而难以选取分类阈值 θ。
w 过大会使逻辑回归进入饱和区域,即 ∂Loss/∂w≈0,从而使学习变得困难。
x 的任何轻微变化都会通过乘以 w 而放大。这对输出的影响很大,将导致模型不稳定。
为了在训练时避免 w 过大,可以在损失函数上添加一项以限制 w 的大小(这里的大小是指各维度的绝对值)。这样,损失函数就变为
Loss=1/N ∑_(i=1)^N▒[-y_((i) ) logy_((i))^'-(1-y_((i) ) ) log(1-y_((i))^' ) ] +λRegularization(w)
λ 是一个超参数(λ>0),用于衡量模型对 w 大小的在意程度。λ 越大,模型越对 w 的减小越在意,对分类效果的重视程度越低。Regularization(w) 称为正则项,主要有两种计算方式,具体如下。
L1正则:Regularization(w)=|w|=|w_1 |+|w_2 |+⋯+|w_m |。
L2正则:Regularization(w)=‖w‖=√(w_1^2+w_2^2+⋯+w_m^2 )。
需要注意的是,无论是L1正则还是L2正则,都不包含 w_0 项,因为 w_0 项不会对输入 x 产生影响。
正则项展现了使用者的主观偏好,即希望 w 较小。使用者可通过 λ 控制主观偏好的“强度”。L1正则用于度量 w 到原点的曼哈顿距离,L2正则用于度量 w 到原点的欧氏距离,其中隐含了我们不希望 w 离坐标原点过远的期望。
虽然L1正则和L2正则的效果都是使 w 减小,但在细节上还是有一些不同的。这些不同会影响最终的学习结果。在使用L2正则时,倾向于对 w 的各个维度进行一定程度的缩减。在使用L1正则时,会优先将对分类影响最小的特征所对应的权重降为0。示例如下。
[0.3,0.2,0.4]^T □(→┴L1正则 ) [0.25,0,0.35]^T
[0.3,0.2,0.4]^T □(→┴L2正则 ) 〖[0.2,0.1,0.3]〗^T
如果使用L1正则,那么,当第 k 维所对应的 w_k=0 时,就相当于模型忽略了第 k 维的特征(〖w_k x〗_k≡0)。我们可以直接在输入中把第 k 维特征去掉。因为具有上述特性,所以L1正则具有特征选择功能。
还有一点值得注意:如果训练样本是线性可分的,则损失函数可以有如下变换。
以上变换根据类别把损失函数分为如下两类。
对于 Loss_(y_((i))=1),因为训练样本是线性可分的,所以 ∑_(y_((i))=1)^ ▒log〖y_((i))^' 〗 中的 y_((i))^'>0.5,
即 w^T x_((i) )+w_0>0,w 的各个维度将按比例放大,使 w^T x_((i) )+w_0→+∞,即 y_((i))^'→
1,从而使 Loss_(y_((i))=0)→0。
对于 Loss_(y_((i) )=0),因为训练样本是线性可分的,所以 ∑_(y_((i) )=0)^ ▒log(1-y_((i))^' ) 中的 (1-y_((i))^' )
>0.5,即 w^T x_((i))+w_0<0,w 的各个维度将按比例放大,使 w^T x_((i))+w_0→-∞,
即 (1-y_((i))^' )→1,从而使 Loss_(y_((i))=0)→0。
通过以上分析可以看出,当训练样本线性可分时,如果按比例将 w 的各个维度放大,那么 Loss 会不断减小并趋近于0(但永远不会为0)。如果此时训练模型,那么 w 会不停地按比例放大,直至各个维度趋近于无穷(+∞ 或 -∞)。从实践的角度看,除非设置了迭代次数或最小化 Loss 的目标值,否则学习将持续进行,且 w 会变得非常大(w 趋近于无穷将导致数值溢出),从而使模型变得非常“硬”。
为了克服上述问题,在常见的开源工具中,逻辑回归大都默认使用L2正则来防止 w 无限增大。
在使用线性回归时,也可以在损失函数中添加正则项。特别地,在使用L2正则训练线性回归模型时,线性回归就是我们常说的“岭回归”。在线性回归中,数据点沿抛物线分布(二次项)。正如前面分析的,使用9阶线性回归来拟合抛物线会发生严重的过拟合,此时,使用正则项即可解决过拟合问题。
使用L2正则,不同的 λ 对模型拟合的影响,如图3-12所示。
图3-12
过大的 λ 会使 w_2~w_9 都趋近于0,模型退化成一阶模型,从而发生欠拟合。
合适的 λ 会使 w_3~w_9 都趋近于0,模型为二阶模型,能很好地完成任务。
过小的 λ 会使正则力度过低,模型容易发生过拟合。
正则项除了具有防止参数 w 过大、模型过“硬”的作用,还具有防止模型过拟合的作用。虽然正则项实现起来相对简单,但其蕴含了贯穿机器学习的思想——泛化能力。当我们使用正则项时,优化目标变为
Object=Loss+λRegularization
Loss 是在全体训练样本上进行计算的,因此,降低 Loss 将使模型尽可能保证训练样本分类正确。Loss 的一般形式比较简单,例如MSE或KL距离,优化起来也相对容易。尽管训练数据包含噪声(极端特例、偶然事件、采集错误),但在模型训练阶段,损失函数会不断调整模型,使其尽可能满足训练数据的需要。当数据量比较大时,样本之间的噪声数据一般会彼此抵消,此时单纯地降低 Loss 并没有太大的问题。然而,当数据量不足时,模型就容易被噪声影响,从而产生过拟合。
例如,预测一个学生在高考中是否能考上一类本科院校(y=1)。以这个学生过往的成绩为训练样本,一共有四个特征,分别为 x_1=语文成绩、x_2=数学成绩、x_3=英语成绩、x_4=理综成绩。假设样本只有以下两个。
y=1,x=[120,131,123,220]^T
y=0,x=〖[110,120,110,30]〗^(T )
我们使用这组训练数据对模型进行训练。只看这两个训练样本,二者的主要差别在于理综成绩,即 x_4 的特征对能否考上一类本科院校有决定性作用,所以,x_4 所对应的 w_4 的数值比较大,而 w_1~w_3 的数值比较小(起的作用不大)。然而,这个结果与我们的认知和事实相悖。实际上,另外三门课的成绩同样重要。在这里,因为训练样本过少,所以模型出现了偏差。如果将这个模型放到真实的场景中,那么预测结果会倾向于“只要理综成绩高,考上一类本科院校的概率较高”—— 这就是过拟合。我们只有收集更多的数据,让样本尽可能多样化,才能降低片面依赖 w_4 的程度。
如果数据量不足,该怎么办呢?我们可以在训练模型时给损失函数添加正则项。这相当于把我们的认知强加给模型,让模型除了能根据数据说话,还能满足我们的主观意愿。在这里,我们的主观意愿就是 w 的取值不要太大。我们的主观意愿合理吗?当然合理。我们处理的任务往往是具有平滑性的。平滑性是指输入的微小变化不会导致结果的巨变。然而,过大的 w 会放大 x 的变化,从而引发输出的巨变。因此,较小的 w 在大多数任务上是适用的。
那么,有没有不平滑的任务呢?例如,预测一个整数是否为质数,这就是一个典型的不平滑任务。在大多数时候,数值的变化不会导致类别的变化(大部分整数都是非质数),但个别的输入变化(10→11)会导致类别的巨变(非质数→质数)。目前,机器学习在不平滑任务上表现很差,在上述极端不平滑任务中几乎没有用武之地。
因此,当我们遇到一个分类任务时,要先判断它是否为平滑任务。如果是平滑任务,就可以放心大胆地使用正则项,根据经验和数据量酌情设置 λ。如果是非平滑任务,那么连机器学习是否适用都有待商榷。
正则项在机器学习中是一个相对通用的方法,在神经网络中也会广泛地使用它,后面我们会详细讨论。
训练完成后,我们需要对训练好的模型进行评测,看看模型是“好”还是“坏”。
首先需要定义评价标准。对分类模型来说,不同的应用场景有不同的评测指标。下面介绍一些常用的指标。
在二分类任务中,两个类别为P和N,模型的输出 y^' 表示样本属于P类的概率。在实际使用时,一般会设置一个阈值 θ:当 y^'>θ 时,模型预测样本为P类;当 y^'<θ 时,模型预测样本为N类。阈值一般为0.5。当然,也可以根据实际情况设置阈值。
同时,在二分类任务中,每个数据点都有真实客观存在的标签(P或N)。模型会对数据点的标签进行判断,从而得到预测标签。假设一共有 M 个测试样本,它们由四种情况组成,如图3-13所示。
图3-13
TP 表示真实标签为P、模型预测为P类的样本数量。
FP 表示真实标签为N、模型预测为P类的样本数量。
FN 表示真实标签为P、模型预测为N类的样本数量。
TN 表示真实标签为N、模型预测为N类的样本数量。
显然,M=TP+FP+FN+TN。
另外,可以得到真实标签为P的样本数量(MP=TP+FN),以及真实标签为N的样本数量(MN=FP+FN)。
在上述四种情况中,只有前两种情况(TP 和 TN)的模型预测结果和真实结果是一致的,因此,正确率(acc)为
acc=(TP+TN)/M
但是,上式存在一些缺陷。当测试样本类别不平衡时,例如N类的样本数量远大于P类的样本数量(MN≫MP),指标 acc 将会失效。假设有1010个样本,其中 MN=1000,MP=10。在1000个真实标签为N的样本中,所有样本都被预测为N类,模型对这1000个样本的预测正确率为100%。而在10个真实标签为P的样本中,只有1个被预测为P类,另外9个都被预测为N类,那么正确率仅为10%。
如果我们用正确率来评价模型,则有
acc=(1000+1)/1010=99.1%
这样看来,模型的正确率其实不低。但真实的情况确是,模型对P类的预测正确率非常低(只有10%),整体正确率高是因为属于N类的样本数量远大于属于P类的样本数量,将正确率拉上来了。因此,如果仅看正确率,那么模型对P类的预测正确率过低这一事实将被掩盖。
为了克服测试样本数量不平衡时重要信息被隐藏的问题,需要引入准确率和召回率。准确率和召回率不是一个整体指标,它们都是针对具体一类(P类或N类)的预测情况进行评测的。以P类为例,准确率和召回率的定义如下。
准确率=TP/(TP+FP)
召回率=TP/(TP+FN)
通俗地讲,对于P类,准确率是指在模型预测结果为P类的样本中有多少比例是真的属于P类的,召回率是指在属于P类的样本中有多少比例会被模型判断为属于P类。上述定义对N类同样成立。准确率高,说明模型的误判少;召回率高,说明模型的漏判少。在上述例子中,P类的准确率和召回率如下。
P类的准确率=1/(1+0)=100%
P类的召回率=1/10=10%
正确率、准确率、召回率都需要模型输出确定的类别(P或N)。预测的类别不仅与模型的输出概率 y^' 有关,也与主观设定的阈值有关。阈值的变化会影响预测结果,进而引起指标的变化。因此,这三个指标不是完全客观的。
为了使模型的评测更加客观,常使用ROC曲线(Receiver Operating Characteristic Curve,接受者操作特性曲线)和AUC(Area Under Curve,指ROC曲线下方的面积)对分类模型进行评测。下面我们了解一下这两个指标的具体含义。
在二分类问题中,有 MP 个样本属于P类,有 MN 个样本属于N类,模型对每个样本计算一个得分。在理想情况下,我们希望P类的得分高于N类的得分。把P类中的每个样本和N类中的所有样本分别进行比较,一共进行 MP×MN 次比较。将P类的模型得分高于N类的模型得分的次数记为 H,可以定义如下指标。
AUC=H/(MP×MN)
显然,如果所有P类的模型得分均高于所有N类的模型得分,那么 H=MP×MN,即 AUC=1。此时,我们认为模型是非常好的,因为它可以将预测结果为P类和N类的得分完美地分开。
如果 AUC=0.5,那么一半P类样本的得分比N类样本的得分高,另一半P类样本的得分比N类样本的得分低,两类样本的模型得分混在一起,没有任何区分度——这样的模型是比较差的。
如果 AUC<0.5,那么模型比“随机猜”还差,因为大部分N类样本的得分都比P类样本的得分高。
将AUC作为模型指标,有以下两个优点。
计算不涉及阈值,仅涉及对模型输出得分的比较,因此是完全客观的。
AUC的值是一个比例,因此,即使两类测试样本的数量差异很大,也不会对该值造成影响。
我们通过一个例子了解一下如何计算AUC。例如,有P类和N类样本各100个,模型预测P类得分为0.9、0.8、0.7的样本分别有30个、40个、30个,N类得分为0.75、0.6的样本分别有20个、80个。此时:
P类得分为0.9的30个样本比100个N类样本的得分都高,对应于 30×100 个组合;
P类得分为0.8的40个样本比100个N类样本的得分都高,对应于 40×100 个组合;
P类得分为0.7的30个样本只比80个N类样本的得分(得分为0.6的80个N类样本)高,对应于 30×80 个组合。
因此,可以计算
AUC=(30×100+40×100+30×80)/(100×100)=0.94
接下来,我们认识一下ROC曲线。在二分类任务中,取一个阈值 θ。在 MP 个P类样本中,模型预测有 m 个P类样本,所以,m 越大,预测结果就越准确。在 MN 个N类样本中,模型预测有 n 个P类样本,所以,n 越大,预测结果就越不准确。如果模型使用不同的阈值,就会产生不同的分类结果,对应于不同的 m 和 n。
画一个坐标系,横坐标为 n/MN,纵坐标为 m/MP,每个具体的阈值唯一确定 (m,n)(对应于坐标系中的一个点)。此时,只要遍历阈值,就能在坐标系中画出一条ROC曲线,如图3-14所示。
当 θ=0 时,无论模型是“好”还是“坏”,所有数据样本都会被模型预测为P类。对P类样本来说,这表示所有数据预测正确,即 m/M=1。对N类样本来说,这表示所有数据预测错误,即 n/N=1。所以,对应的坐标系中的点是 (1,1)。
当 θ=1 时,无论模型是“好”还是“坏”,所有数据样本都会被模型预测为N类。对P类样本来说,这表示所有数据预测错误,即 m/M=0。对N类样本来说,这表示所有数据预测正确,即 n/N=1。所以,对应的坐标系中的点是 (0,0)。
图3-14
因此,ROC曲线一定经过 (0,0) 和 (1,1) 两个点——与模型无关。不过,曲线中的其他点与模型有关。
我们不加证明地给出如下结论(具体证明过程比较复杂,感兴趣的读者可自行查阅相关文献)。
ROC曲线下的面积=AUC
这也是AUC的值的几何意义。
AUC的值常用于对数据进行排序的场景,例如推荐、搜索、广告等。
为了更直观地理解训练阶段 w 各维度的数值更新,我们可以画出 w 坐标系中损失函数的等高线图。尽管每个 w 对应于唯一的 Loss,但一个 Loss 会对应于多个取不同值的 w。对应于同一个 Loss 值的 w 连接起来组成的线,称为等高线。
当 w=〖[w_1,w_2]〗^T 时,等高线图如图3-15所示,箭头表示在学习阶段 w 的变化路径。同一条等高线上的 Loss 值相同。在学习阶段,梯度下降法会迭代移动 w,使 w 移动到低势的等高线上(靠近中心)。
图3-15
如果特征 x_1 的数量级远大于特征 x_2,那么 Loss 将对 w_1 更敏感,w_1 的轻微波动会对逻辑回归结果造成很大的影响,并最终导致 Loss 的剧烈波动;w_2 的变化对 Loss 的影响则相对较小。
例如:x_1 表示身高,单位为毫米;x_2 表示体重,单位为千克;数据特征为 〖[1750,60]〗^T。可以看出,x_1 在数量级上是 x_2 的100倍,在等高线上表现为:Loss 等高线在 w_1 方向比较“窄”,w_1 的轻微变化会导致等高线上较大的移动,即 Loss 对 w_1 方向较为敏感。相应的,Loss 对 w_2 方向较为迟钝。因此,在学习阶段,为了使 w_1 和 w_2 对 Loss 下降的贡献一致,理想的状态是:敏感的 w_1 每次更新幅度相对较小,迟钝的 w_2 每次更新幅度相对较大。
我们再看看当特征维度 x_1 和 x_2 的数量级差异过大时各维度 w 更新梯度的实际情况,公式如下。
可以发现,∂Loss/(∂w_i ) 和 x_i 成正比。
在这个例子中,∂Loss/(∂w_1 ) 在数量级上大于 ∂Loss/(∂w_2 ),因此,每次更新 w 时,在 w_1 方向上的移
动幅度大于 w_2,这与上面的理想情况相悖。实际学习过程如图3-16所示。
图3-16
这种现象称为zigzag,等高线 Loss 对 w_1 和 w_2 方向的敏感程度差异过大,非常不利于参数学习。
在理想情况下,我们希望 w_1 和 w_2 的变化对 Loss 的影响处于同一量级,即 ∂Loss/(∂w_1 ) 和
∂Loss/(∂w_2 ) 在数值上处于同一量级(有利于优化)。∂Loss/(∂w_1 ) 和 ∂Loss/(∂w_2 ) 数量级不一致的原因是特征 x_1
和 x_2 的数量级不一致。因此,需要制定一个标准,把各维度的特征归一到同一个数量级。
通过方差将 x_1 和 x_2 归一,也就是说,先计算 x_1 和 x_2 维度的标准差 δ_1 和 δ_2,再更新 x_1 和 x_2,公式如下。
x_1^'=x_1/δ_1 ,x_2^'=x_2/δ_2
此时,w_1 和 w_2 对 Loss 的影响一致,等高线为圆形,如图3-17所示。
图3-17
当等高线为圆形时,等高线对各个维度的敏感程度就是相同的了。此时,可以设置较大的学习因子来减少梯度下降的迭代次数,加快训练进程。图3-17中箭头的方向就是 w 的更新方向,w 不再反复震荡,学习速度得到了提高。
对同一个特征使用不同的提取方式,会对逻辑回归的效果产生影响。例如,在电商场景中,年龄是一个重要特征,我们可以通过年龄预测用户购买某商品的概率。年龄(age)可以用两种方式来表达。
第一种方式是直接编码。用1维特征表示年龄,例如23岁,特征 x=[23]。此时,年龄对 d=w^T x+w_0 只存在线性影响,即 d=w_1 x_1+w_0=w_1 age+w_0,如图3-18所示。这种特征提取方式简单、直接,但忽略了不同年龄对购买行为影响的差异(正负、强弱)。
图3-18
第二种方式是采用one-hot编码。我们把年龄从0到100岁分成四段,用4维向量来表示。不同年龄段有如下特征。
小孩:〖[1,0,0,0]〗^T,0 年轻人:〖[0,1,0,0]〗^T,18 中年人:〖[0,0,1,0]〗^T,40 老年人:〖[0,0,0,1]〗^T,60 例如,25岁的购物者的年龄所对应的特征为 〖[0,1,0,0]〗^T。使用one-hot编码,不同的区间特征有不同的权重,表达更加多样且稳定(24岁和25岁其实没有很大的差别)。此时,d=w^T x+w_0 与年龄特征 x 的关系如下式所示。 d=w_1 x_1+w_2 x_2+w_3 x_3+w_4 x_4+w_0 其中,x_1、x_2、x_3、x_4 有且仅有一个为1。d 和 age 的关系,如图3-19所示。 图3-19 可以看出,age 和 d 成非线性关系,不同的年龄对最终分类结果的影响的权重不同,这增强了模型的表达能力。 我们可以进一步在one-hot编码的相应位置填写某个年龄在该年龄段中所占的比例,如下式所示。 此时,会在one-hot编码的各个位置对 age 进行更加细致的分段表达,即 x_i∈[0,1],且每一段都有对应的参数 d=w_1 x_1+w_2 x_2+w_3 x_3+w_4 x_4+w_0 此时 d 和 age 的关系,如图3-20所示。 图3-20 可以看出,age 和 d 的非线性关系进一步加强,并且,在0~18岁和18~40岁这两个年龄段,购买欲望和年龄成正相关,而在40~60岁和60~100岁这两个年龄段,年龄越大,购买欲望越低。 在面试人工智能相关岗位时,我们经常会被面试官问一个问题:为什么逻辑回归不能像线性回归一样使用MSE作为损失函数呢?主要原因有以下两个。 第一,将MSE作为逻辑回归的损失函数,即当 Loss=1/N ∑_(i=1)^N▒〖(y_((i))^'-y_((i)))〗^2 时,有 ∂Loss/∂w=2/N ∑_(i=1)^N▒〖(y_((i))^'-y_((i)))y_((i))^' (1-y_((i))^')x_((i)) 〗 在这里,y_((i))^' (1-y_((i))^') 非常容易趋近于0(无论预测是否准确:当样本被预测为P类时,1-y_((i))^'≈0;当样本被预测为N类时,y_((i))^'≈0),导数值非常小,w 的更新效率极低,学习时间极长。 第二,w-MSE 曲线存在局部极小值。w 落在局部最小位置(如图3-21所示)后就不会再更新了,但此时 Loss 仍比较大,模型效果不佳,将发生欠拟合。 图3-21 可能有些读者会认为:虽然将MSE作为损失函数并不合适,但只要是能度量距离的函数,理论上都可以作为损失函数,所以也不一定要使用KL距离。在这里选择KL距离,其实是有统计学理论作为支撑的。下面我们一起了解一下KL距离背后的数学原理。 在使用模型预测样本 x_((i)) 的类别时,模型的输出为 y_((i))^',即预测结果为P类的概率为 y_((i))^',预测结果为N类的概率为 〖1-y〗_((i))^'。 如果 x_((i) ) 的真实类别为P类,也就是 y_((i) )=1,那么模型预测结果为P类的概率为 P(y=y_((i) ) |x_((i) ) )=y_((i))^'。 如果 x_((i)) 的真实类别为N类,也就是 y_((i))=0,那么模型预测结果为N类的概率为 P(y=y_((i)) |x_((i)) )=1-y_((i))^'。 这是一个典型的二项分布,可以统一写成 P(y=y_((i)) |x_((i)) )=〖y_((i))^'〗^(y_((i)) ) (1-y_((i))^' )^((1-y_((i)))) N 个训练样本 〖{x_((i)),y_((i))}〗_(i=1)^N 的似然函数为 likelihood=∏_(i=1)^N▒P(y=y_((i)) |x_((i)) ) 为了方便计算,我们对似然函数取对数。似然函数变为 likelihood=log∏_(i=1)^N▒P(y=y_((i) ) |x_((i) ) ) =∑_(i=1)^N▒logP(y=y_((i) ) |x_((i) ) ) =∑_(i=1)^N▒〖log[〖y_((i))^'〗^(y_((i) ) )∙(1-y_((i))^' )^((1-y_((i) ) ) ) ]=∑_(i=1)^N▒〖y_((i)) log〖y_((i))^' 〗+(1-y_((i)) ) log(1-y_((i))^' ) 〗〗 因为训练样本是已经发生的事件,所以“好模型”的标准就是能够使似然函数最大化(最大似然估计)。优化目标为最大化似然函数,即 max(likelihood),它等价于 min(-likelihood),故优化目标为 min(-likelihood)〖=min〗[∑_(i=1)^N▒〖-y_((i)) log〖y_((i))^' 〗-(1-y_((i)) ) log(1-y_((i))^' ) 〗] 可以看出,-y_((i)) log〖y_((i))^' 〗-(1-y_((i)) ) log(1-y_((i))^' ) 就是 y_((i))^' 和 y_((i)) 的KL距离,优化目标就是最小化各样本的KL距离之和。 通过以上分析可以发现,使用KL距离的原因就是它等价于最大似然估计。最大似然估计是一种经典的统计学参数估计方法,有充分的理论依据和实践基础。 讨论一个问题:能把 w^T x+w_0 归一至 (0,1) 的函数有很多,为什么一定要选择逻辑函 数 f(x)=1/(1+e^(〖-(w〗^T x+w_0)) ) 呢? 假设通过身高 x 来预测性别 y,y=1 表示男性,y=0 表示女性,男性和女性的身高分布都满足正态分布,如下所示。 男性的身高分布为 P(x|y=1)=1/√2πσ e^(-〖(x-μ_1)〗^2/(2σ^2 )) 女性的身高分布为 P(x|y=0)=1/√2πσ e^(-〖(x-μ_2)〗^2/(2σ^2 )) 其中,男性身高的均值为 μ_1,女性身高的均值为 μ_2,方差都为 σ。我们知道一个人的身高 x,想通过身高预测他(她)的性别,这就是一个典型的二分类问题——其实就是比较 P(y=1│x) 和 P(y=0│x) 的大小。需要注意的是,P(y=1│x)+P(y=0│x)=1。 根据贝叶斯公式,当一个人的身高为 x 时,他(她)为男性的概率为 P(y=1│x)=(P(y=1))/(P(x)) P(x|y=1) 同理,当一个人的身高为 x 时,他(她)为女性的概率为 P(y=0│x)=(P(y=0))/(P(x)) P(x|y=0) 将二者相除,有 (P(y=1│x))/(P(y=0│x) )=(P(y=1))/(P(y=0)) (P(x|y=1))/(P(x|y=0)) 根据身高分布,可知 P(x|y=1)=1/√2πσ e^(-〖(x-μ_1)〗^2/(2σ^2 )) P(x|y=0)=1/√2πσ e^(-〖(x-μ_2)〗^2/(2σ^2 )) 令 (P(y=1))/(P(y=0))=α,则 (P(y=1│x))/(P(y=0│x) ) 可表示为 (P(y=1│x))/(P(y=0│x) )=αe^(-〖(x-μ_1 )^2-(x-μ_2 )〗^2/(2σ^2 )) =e^lnα e^(-((2μ_2-2μ_1 )x+(μ_1^2-μ_2^2 ))/(2σ^2 )) =e^(-((2μ_2-2μ_1 )x+(μ_1^2-μ_2^2 ))/(2σ^2 )+lnα) 结合 P(y=1│x)+P(y=0│x)=1,可以得出 P(y=1│x)=1/(1+e^(-(((2μ_1-2μ_2 )x+(μ_2^2-μ_1^2 ))/(2σ^2 )+lnα) ) ) 令 w=(μ_1-μ_2)/σ^2 ,w_0=(μ_2^2-μ_1^2)/(2σ^2 )+lnα,则 P(y=1│x)=1/(1+e^(-(wx+w_0)) ) 看看上式,是不是很眼熟?对,这就是逻辑回归。通过推导可以发现,逻辑回归是假设数据符合正态分布,然后使用贝叶斯定理推导出来的。它虽然形式简单,但有很强的数学特性——逻辑函数可不是数学家们拍脑袋选出来的。 不过,在这里需要注意:将逻辑回归作为分类函数,相当于默认了偏置条件“数据满足正态分布”。经统计学方法验证,当数据量足够大时,概率分布都会趋近于正态分布,这就是中心极限定理。这也说明,在训练模型时,数据量越大,效果越好。 如果P类样本的数量远高于N类样本的数量,那么 α=(P(y=1))/(P(y=0)) 的值将变得很大,从而导 致 w_0=(μ_2^2-μ_1^2)/(2σ^2 )+lnα 的值较大,使结果 P(y=1│x) 在所有特征上都偏大,样本容易被预测为 P类。这也从侧面印证了样本平衡的重要性。 对机器学习感兴趣的读者可以去主页关注我;本人著有《速通深度学习》以及《速通机器学习数学基础》二书,想要完整版电子档可以后台私信我;实体版已出版在JD上有售,有兴趣的同学可以自行搜索了解;想一起学习机器学习的话也可以后台私信,本人所做机器学习0基础教程已有60余章还未公开;想了解的话也是后台私信或者评论区留言。3.7 深入理解损失函数和逻辑函数