2-逻辑回归
1-逻辑回归相关基础概念
1.1最大似然估计
���币有正反两面,如果硬币正反两面是均匀的,即每次抛掷后硬币为正的概率是0.使用这个硬币,很可能抛10次,有5次是正面。但是假如有人对硬币做了手脚,比如提前对硬币做了修改,硬币正面朝上概率大幅度提升了,你拿到硬币在尝试抛了10次,结果8次都是正面,如何估算下次硬币为正的概率呢?
()1.2概率
现在我们可以做出猜测,假设硬币出现正面概率的参数 θ \theta θ分别等于(0.6,0.7,0.8),那么这三种硬币参数下,出现“8正2反”的整体概率分别是多少呢:
P ( 8 正 2 反 ∣ θ ) = C 10 2 ( 1 − θ ) 2 ∗ θ 8 P(8正2反|\theta) = C_{10}^{2}(1-\theta)^2 * \theta^8 P(8正2反∣θ)=C102(1−θ)2∗θ8
import numpy as np print(f"theta = 0.6, 概率为{10*9/2 * np.power(1-0.6, 2) * np.power(0.6, 8):.3}") print(f"theta = 0.7, 概率为{10*9/2 * np.power(1-0.7, 2) * np.power(0.7, 8):.3}") print(f"theta = 0.8, 概率为{10*9/2 * np.power(1-0.8, 2) * np.power(0.8, 8):.3}") # theta = 0.6, 概率为0.121 # theta = 0.7, 概率为0.233 # theta = 0.8, 概率为0.302
可以看出,我们假设硬币朝正面参数为0.8的时候,出现8正2反情况的概率最大。我们有理由相信,0.8是候选的3个参数中的最接近真实概率的选项。
1.3 似然函数(likelihood function)
在上面的尝试中,0.8似乎是一个不错的猜测没,,但是否可能是0.81或者0.79呢,我们当然可以按照上面的方法再次计算概率,但是问题是我们无法遍历整个空间。因此我们需要定义一个函数来表示不同的参数 θ \theta θ下,表示多个独立事件 ( x 1 , x 2 , . . , x n ) (x_1, x_2, .., x_n) (x1,x2,..,xn)发生的整体概率,这个函数我们叫它似然函数(likelihood function, 通常用L表示),其中组合数部分是常数,我们可以直接忽略。
L ( x 1 , x 2 , . . . , x n ∣ θ ) = ∏ 1 n p ( x i ∣ θ ) L(x_1, x_2, ..., x_n|\theta) = \prod_{1}^{n}p(x_i|\theta) L(x1,x2,...,xn∣θ)=1∏np(xi∣θ)
似然函数通常用L表示,观察到抛硬币“8正2反”的事实,硬币参数 θ \theta θ取不同值时,似然函数表示为:
L ( 8 正 2 反 ∣ θ ) = ( 1 − θ ) 2 ∗ θ 8 L(8正2反|\theta) = (1- \theta)^2 * \theta^8 L(8正2反∣θ)=(1−θ)2∗θ8
通过似然函数,我们只要能找到使得似然函数最大(多个独立事件 ( x 1 , x 2 , . . , x n ) (x_1, x_2, .., x_n) (x1,x2,..,xn)发生的整体概率最大化)的 θ \theta θ,就可以完成对硬币参数的估计了,这就是最大似然估计:
θ ^ = a r g m a x θ ∏ 1 n p ( x i ∣ θ ) \hat{\theta} = argmax_{\theta}\prod_{1}^{n}p(x_i|\theta) θ^=argmaxθ1∏np(xi∣θ)
1.4最大似然估计
通常,由于似然函数为连乘,会造成小数位过高,无法有效表示,我们采用对数似然函数进行表示,把连乘转化为累加形式:
()l ( x 1 , x 2 , . . . , x n ∣ θ ) = ∑ 1 n l o g p ( x i ∣ θ ) l(x_1, x_2, ..., x_n|\theta) = \sum_{1}^{n}log p(x_i|\theta) l(x1,x2,...,xn∣θ)=1∑nlogp(xi∣θ)
θ ^ = a r g m a x θ ∑ 1 n l o g p ( x i ∣ θ ) \hat{\theta} = argmax_{\theta}\sum_{1}^{n}log p(x_i|\theta) θ^=argmaxθ1∑nlogp(xi∣θ)
2.0逻辑回归
逻辑回归是线性分类模型,说线性是因为其决策边界是线性的(平面或超平面),模型输出值域为(0, 1),通常我们将输出结果视为属于正样 ( y = 1 ) (y=1) (y=1)的概率。我们先来看一下逻辑回归模型的数学表示:
P ( x ) = σ ( w T x ) = 1 1 + e x p − w T x P(x) = \sigma(w^Tx) = \frac{1}{1+exp^{-w^Tx}} P(x)=σ(wTx)=1+exp−wTx1
与线性回归类似, x x x为样本特征,为了表示方便,类似的增加一个bias维度,值为1, w w w为模型系数,函数 σ ( θ ) = 1 1 + e x p − θ \sigma(\theta)=\frac{1}{1+exp^{-\theta}} σ(θ)=1+exp−θ1被称为 s i g m o i d sigmoid sigmoid函数,其函数图像如下所示。可以发现 s i g m o i d sigmoid sigmoid函数具备一些比较良好的特性,首先其输出值域为(0,1),可以直接视作为正样本概率,其次其梯度在0附近最大,可以在梯度下降优化过程中,更加到聚焦到较难分类的样本上。
2.1逻辑回归的似然函数与梯度
tips: 本段包含了不少公式计算,但公式本身的推导细节并不是最重要的,最重要的是通过引入似然函数,我们构造了逻辑回归的损失函数,且该损失函数可以利用梯度下降进行优化。
对逻辑回归模型的数学表示有一个基本认识后,我们来思考一个问题,我们应该怎么去优化模型参数? 假设我们有 n n n个样本 ( x 1 , x 2 , . . . , x n ) (x^1, x^2,...,x^n) (x1,x2,...,xn),其对应标签为 ( y 1 , . . . , y n ) (y^1,...,y^n) (y1,...,yn)且任意 y i ∈ 0 , 1 y^i \in {0,1} yi∈0,1,根据最大似然原理,我们可以用逻辑回归表示出所有n个样本的似然函数,并使之最大化。对于单个样本 ( x i , y i ) (x^i, y^i) (xi,yi), 模型预测结果与样本真实标签一致的概率为:
p ( y = y i ∣ x i ) = p ( x i ) y i ( 1 − p ( x i ) ) 1 − y i p(y=y^i|x^i)=p(x^i)^{y^i} (1-p(x^i))^{1-y^{i}} p(y=yi∣xi)=p(xi)yi(1−p(xi))1−yi
这里我们讨了个巧,因为 y i y^i yi只有可能等于0或1,所以当 y i = 1 y^i=1 yi=1的时候,第二项等于1,当 y i = 0 y^i=0 yi=0的时候,第一项等于1,通过这种设计我们可以把 y i y^i yi分别等于0或1的两种情况写在一个公式里,好了,这里是样本 i i i模型预测结果与样本真实标签一致的概率,那么假设样本是独立的(机器学习模型对于样本都有IID即独立同分布假设),样本总体的模型预测结果与样本真实标签一致的概率为:
L i k e l i h o o d = ∏ i p ( y = y i ∣ x i ) = ∏ i p ( x i ) y i ( 1 − p ( x i ) ) 1 − y i Likelihood = \prod_i{p(y=y^i|x^i)=\prod_i{p(x^i)^{y^i}} (1-p(x^i))^{1-y^{i}}} Likelihood=i∏p(y=yi∣xi)=i∏p(xi)yi(1−p(xi))1−yi
两边同时取对数,对数似然函数为:
l o g l i k e l i h o o d = ∑ i [ y i l o g p ( x i ) + ( 1 − y i ) l o g ( 1 − p ( x i ) ) ] loglikelihood = \sum_i[{y^ilogp(x^i)} + (1-y^{i})log(1-p(x^i))] loglikelihood=i∑[yilogp(xi)+(1−yi)log(1−p(xi))]
l o g l i k e l i h o o d = ∑ i [ y i l o g p ( x i ) 1 − p ( x i ) + l o g ( 1 − p ( x i ) ) ] loglikelihood = \sum_i[{y^ilog\frac{p(x^i)}{1-p(x^i)}} + log(1-p(x^i))] loglikelihood=i∑[yilog1−p(xi)p(xi)+log(1−p(xi))]
那么这个对数似然函数就是我们需要优化的目标的,其值越大越好,越大说明模型预测概率和真实发生概率一致性越高。由于梯度下降法是验证最小化损失函数目标进行的,因此我们对对数似然函数乘以-
J ( w ) = − ∑ i [ y i l o g p ( x i ) 1 − p ( x i ) + l o g ( 1 − p ( x i ) ) ] J(w) = -\sum_i[{y^ilog\frac{p(x^i)}{1-p(x^i)}} + log(1-p(x^i))] J(w)=−i∑[yilog1−p(xi)p(xi)+log(1−p(xi))]
求关于参数的梯度,根据求导法则可得:
g = ∂ J ∂ w = ∑ i ( p ( x i ) − y i ) ∗ x i g = \frac{\partial{J}}{\partial{w}}= \sum_i (p(x^i)-y^i)*x^i g=∂w∂J=i∑(p(xi)−yi)∗xi
有了梯度,根据上节课我们学习的梯度下降,就可以根据学习率 α \alpha α逐步迭代更新模型参数:
w = w − α ∗ g w = w - \alpha * g w=w−α∗g
3.分类问题常用评价指标
在二分类场景,模型所有的预测结果可以分为四类:
- TP(True positive),意思是模型预测为正样本(Positive),预测是正确的(True)
- FP(False positive),意思是模型预测为正样本(Positive),预测是错误的(False)
- TN(True negtive),意思是模型预测为负样本(negtive),预测是正确的(True)
- FN(False negtive),意思是模型预测为负样本(negtive),预测是错误的(False)
基于以上四类预测结果,我们可以定义指标:
-
准确率 A c c u r a c y = # T P + # T N # A L L Accuracy = \frac{\#TP + \#TN}{\# ALL} Accuracy=#ALL#TP+#TN ,简单理解就是,所有预测结果中,预测正确的比例,值越大说明模型表现越好。
-
精准率 p r e c i s i o n = # T P # T P + # F P precision = \frac{\#TP}{\#TP+\#FP} precision=#TP+#FP#TP,所有预测的正样本,正确的比例,值越大说明模型表现越好。
-
召回率 $recall = \frac{#TP}{#TP+#FN} $,所有正样本被正确预测的比例,值越大说明模型表现越好。
参考资料
对应的项目参考代码可以查看泰坦尼克号-灾难中的机器学习