1 逻辑回归原理
(1)理论原理
逻辑回归也称作logistic回归分析,是一种广义的线性回归分析模型,属于机器学习中的监督学习。其推导过程与计算方式类似于回归的过程,但实际上主要是用来解决二分类问题(也可以解决多分类问题)。通过给定的nnn组数据(训练集)来训练模型,并在训练结束后对给定的一组或多组数据(测试集)进行分类。其中每一组数据都是由ppp个指标构成。
逻辑回归(Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)。常用于做数据的初步判断,(推荐算法,医疗诊断等),是通过线性模型完成分类效果(线性可分)。
- 线性回归:尽可能让样本点和模型线重合
- 逻辑回归:尽可能让样本点远离模型线,模型线的两侧是两个类别,样本距离模型线越远越好
(2)sigmoid 函数
sigmoid
将线性问题转化为概率问题,将结果值压缩到0-1之间(0负,1正)。
z=wx+bf(z)=11+e−zf(z)′=f(z)(1−f(z))
z = wx + b\\
f(z) = \dfrac{1}{1 + e^{-z}}\\
f(z)' = f(z)(1-f(z))
z=wx+bf(z)=1+e−z1f(z)′=f(z)(1−f(z))
sigmoid
函数,代表的是样本为正类别的概率,在阈值0.5范围之间梯度大,会将数据值尽可能的分到0或1的位置
阈值区分 如果sigmoidsigmoidsigmoid求出的结果大于0.5,就是正类别,否则就是负类别
2 损失函数
2.1 损失函数推导
极大似然估计:事情已经发生了,当未知参数等于多少时,能让这个事情发生的概率最大,执果索因。如果我们想要让所计算的结果更准确,就可以将每次计算的结果进行相乘,让最后的概率最大即可。
(1)样本为0-1时
某样本属于正例的概率表示为
P(yi=1∣xi)=exp(w∙xi)1+exp(w∙xi)
P(y_{i}=1|x_{i})=\dfrac{exp(w\bullet x_{i})}{1+exp(w \bullet x_{i})}
P(yi=1∣xi)=1+exp(w∙xi)exp(w∙xi)
某样本属于负例的概率表示为
P(yi=0∣xi)=11+exp(w∙xi)
P(y_{i}=0|x_{i})=\dfrac{1}{1+exp(w \bullet x_{i})}
P(yi=0∣xi)=1+exp(w∙xi)1
其中,w=(w(1),w(2),…,w(n),b)T,xi=(xi(1),xi(2)…,xi(n),1)Tw = (w^{(1)},w^{(2)},…, w^{(n)},b)^T , x_i = (x_i^{(1)},x_i^{(2)}…,x_i^{(n)},1)^Tw=(w(1),w(2),…,w(n),b)T,xi=(xi(1),xi(2)…,xi(n),1)T。因此,似然函数为:
∏i=1N[P(yi=1∣xi)]yi[P(y=0∣xi)]1−yi
\prod_{i=1}^{N}[P(y_{i}=1|x_{i})]^{y_{i}}[P(y=0|x_{i})]^{1-y_{i}}
i=1∏N[P(yi=1∣xi)]yi[P(y=0∣xi)]1−yi
求似然函数最大,加负号求最小,得到代价函数为:
Cost(w)=−1N∑i=1N[yilogP(yi=1∣xi)+(1−yi)logP(yi=0∣xi)]=−1N∑iN[yi∗logP(yi=1∣xi)P(yi=0∣xi)+logP(yi=0∣xi)]=−1N∑iN[yi∗(w∙xi)−log(1+exp(w∙xi))]
Cost(w)=-\frac{1}{N}\sum_{i=1}^{N}[y_{i}{\log}P(y_{i}=1|x_{i})+(1-y_{i}){\log}P(y_{i}=0|x_{i})]\\
=-\frac{1}{N}\sum_i^N[y_i*{\log}\frac{P(y_{i}=1|x_{i})}{P(y_{i}=0|x_{i})}+{\log}P(y_{i}=0|x_{i})]\\
=-\frac{1}{N}\sum_i^N[y_i*(w \bullet x_i)-\log(1+\exp(w \bullet x_i))]
Cost(w)=−N1i=1∑N[yilogP(yi=1∣xi)+(1−yi)logP(yi=0∣xi)]=−N1i∑N[yi∗logP(yi=0∣xi)P(yi=1∣xi)+logP(yi=0∣xi)]=−N1i∑N[yi∗(w∙xi)−log(1+exp(w∙xi))]
再用梯度下降法反解www
(2)样本为-1 和1时
某样本属于正例的概率表示为
P(yi=1∣xi)=exp(w∙xi)1+exp(w∙xi)
P(y_{i}=1|x_{i})=\dfrac{exp(w \bullet x_{i})}{1+exp(w \bullet x_{i})}
P(yi=1∣xi)=1+exp(w∙xi)exp(w∙xi)
某样本属于负例的概率表示为
P(yi=−1∣xi)=11+exp(w∙xi)
P(y_{i}=-1|x_{i})=\dfrac{1}{1+exp(w \bullet x_{i})}
P(yi=−1∣xi)=1+exp(w∙xi)1
因此,似然函数为:
∏i=1N11+exp(−yiw∙xi)
\prod_{i=1}^{N}\frac{1}{1+exp(-y_{i}w \bullet x_{i})}
i=1∏N1+exp(−yiw∙xi)1
代价函数为:
Cost(w)=−1N∑i=1Nlog(1+exp(−yiw∙xi))
Cost(w)=-\frac{1}{N}\sum_{i=1}^{N}{\log}(1+exp(-y_{i}w \bullet x_{i}))
Cost(w)=−N1i=1∑Nlog(1+exp(−yiw∙xi))
再用梯度下降法反解www
似然函数加入L2正则化后目标函数为:
Obj(w)=1N∑i=1Nlog(1+exp(−yiw∙xi))+λ12∣∣w∣∣22
Obj(w)=\frac{1}{N}\sum_{i=1}^{N}\log(1+exp(-y_{i}w \bullet x_{i}))+\lambda\frac{1}{2}||w||_2^2
Obj(w)=N1i=1∑Nlog(1+exp(−yiw∙xi))+λ21∣∣w∣∣22
目标函数导数为:
Objw′=1N∑i=1N{−yiexp(−yiw∙xi)1+exp(−yiw∙xi)xi}+λw
Obj_w^{'}=\frac{1}{N}\sum_{i=1}^{N} \lbrace -y_{i}\frac{exp(-y_{i}w \bullet x_{i})}{1+exp(-y_{i}w \bullet x_{i})} x_{i}\rbrace+\lambda{w}
Objw′=N1i=1∑N{−yi1+exp(−yiw∙xi)exp(−yiw∙xi)xi}+λw
=1N∑i=1N{−yi(1−11+exp(−yiw∙xi))xi}+λw =\frac{1}{N}\sum_{i=1}^{N}\lbrace-y_{i}(1-\frac{1}{1+exp(-y_{i}w \bullet x_{i})})x_{i}\rbrace+\lambda{w} =N1i=1∑N{−yi(1−1+exp(−yiw∙xi)1)xi}+λw
更新权重:
w=w−γObjw′
w=w-\gamma{Obj_w}'
w=w−γObjw′
2.2 二分类交叉熵
我们也可以使用信息论解释逻辑回归的代价函数,
- 概率就是判断一件事情发生的可能性
- 信息量是得知该消息时的意外程度
信息量=log1P=−logP 信息量=\log{\frac{1}{P}}=-\log{P} 信息量=logP1=−logP
概率越低,信息量越大
-
用于分类问题,概率越低,证明模型计算越不准确
-
熵是用来衡量信息不确定性的单位(概率和信息量乘积)
-
交叉熵
用来检验实际发生概率和预测准确率信息量的乘积
其中,pkp_kpk为样本实际发生概率, qkq_kqk为样本预测准确的概率
pklog(qk) p_k\log(q_k) pklog(qk)
在二分的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为ppp和 1−p1−p1−p,此时目标函数(交叉熵)表达式为( log\loglog底数是eee):
L(w)=1N∑iNLi=1N∑iN[yi∗log(pi)+(1−yi)∗log(1−pi)]=1N∑iN[yi∗log(pi1−pi)+log(1−pi)]=1N∑iN[yi∗(w∙xi)−log(1+exp(w∙xi))]
\begin{aligned}
L(w)&=\frac{1}{N}\sum_i^NL_i\\
&=\frac{1}{N}\sum_i^N[y_{i}*\log(p_{i})+(1-y_{i})*\log(1-p_{i})]\\
&=\frac{1}{N}\sum_i^N[y_{i}*\log(\frac{p_{i}}{1-p_{i}})+\log(1-p_{i})]\\
&=\frac{1}{N}\sum_i^N[y_i*(w \bullet x_i)-\log(1+\exp(w \bullet x_i))]
\end{aligned}
L(w)=N1i∑NLi=N1i∑N[yi∗log(pi)+(1−yi)∗log(1−pi)]=N1i∑N[yi∗log(1−pipi)+log(1−pi)]=N1i∑N[yi∗(w∙xi)−log(1+exp(w∙xi))]
其中:
- yiy_{i}yi—— 表示样本iii的label,正类为1 ,负类为0
- pip_{i}pi—— 表示样本iii预测为正类的概率,pi=P(yi=1∣xi)=exp(w∙xi)1+exp(w∙xi)p_i=P(y_{i}=1|x_{i})=\dfrac{exp(w\bullet x_{i})}{1+exp(w \bullet x_{i})}pi=P(yi=1∣xi)=1+exp(w∙xi)exp(w∙xi)
2.3 sklearn中逻辑回归
逻辑回归调库:
-
sklearn.linear_model.LogisticRegression(solver=‘liblinear’, penalty=‘l2’, C = 1.0)
-
solver可选参数:{‘liblinear’, ‘sag’, ‘saga’,‘newton-cg’, ‘lbfgs‘},
-
默认: ’liblinear’;用于优化问题的算法。
-
对于小数据集来说,“liblinear”是个不错的选择,而“sag”和‘saga’对于大型数据集会更快。
-
对于多分类问题,只有’newton-cg’, ‘sag’, 'saga’和’lbfgs’可以处理多项损失;“liblinear”仅限于“one-versus-rest”分类。
-
-
penalty:指定正则化的参数可选为"l1", “l2” 默认为“l2”. 注意:l1正则化会将部分参数压缩到0,而l2正则化不会让参数取到0只会无线接近
-
C:大于0的浮点数。C越小对损失函数的惩罚越重
-
multi_class : 告知模型要处理的分类问题是二分类还是多分类。默认为“ovr”(二分类)
- “multinational” : 表示处理多分类问题,在solver="liblinear"时不可用
- “auto” : 表示让模型自动判断分类类型
3 多分类(softmax)
接触过二分类问题,使用sigmoid函数很好去解决,如果变成多分类问题,应该如何解决呢?多分类使用softmax方式来进行处理,softmax是logistic回归的一般形式。可以通过softmax进行合理分类,以下分类为 考拉0, 猫1, 狗2 ,鸡3
3.1 算法原理
softmax公式如下:
f(z)=ez∑i=1nez
f(z)=\frac{e^z}{\sum_{i=1}^{n}e^z}
f(z)=∑i=1nezez
多分类是二分类的一种拓展形式,二分类采用阈值方式进行分类,多分类采用最大概率进行分类。
多分类处理的原理也是通过线性模型解决分类问题。
3.2 损失函数
单个样本的交叉熵代价函数的公式为:
L(pi,yi)=−∑k=1Kyiklogpik
L({p_{i}},y_{i})=-\sum_{k=1}^{K}y_{ik}\log p_{ik}
L(pi,yi)=−k=1∑Kyiklogpik
多分类交叉熵
多分类交叉熵就是对二分类交叉熵的扩展,在计算公式中和二分类稍微有些许区别,但是还是比较容易理解,具体公式如下所示:
L=1N∑iNLi=−1N∑iN∑k=1Kyiklogpik
L=\frac{1}{N}\sum_i^NL_i=-\frac{1}{N}\sum_i ^N\sum_{k=1}^{K}y_{ik}\log p_{ik}
L=N1i∑NLi=−N1i∑Nk=1∑Kyiklogpik
其中:
- NNN——样本数量
- KKK——类别的数量,YYY的取值集合有{c1,c2,...,cK}\{c_1,c_2,...,c_K\}{c1,c2,...,cK}
- yiky_{ik}yik——样本yi=cky_i=c_kyi=ck是,取111,不等于取000
- pikp_{ik}pik——观测样本iii属于类别kkk的预测概率,通过softmaxsoftmaxsoftmax计算得到,pik=P(yi=ck∣xi)=exp(wk∙xi)∑k=1Kexp(wk∙xi)p_{ik}= P(y_i=c_k|x_i)=\frac{\exp{(w_k \bullet x_i)}}{\sum_{k=1}^K\exp{(w_k \bullet x_i)}}pik=P(yi=ck∣xi)=∑k=1Kexp(wk∙xi)exp(wk∙xi)
4 逻辑回归优缺点
-
优点
- 模型简单,易于解释
- 算法容易并行,适合大数据的求解
-
缺点
- 不能拟合非线性数据
- 采用何种特征组合需要一定的数据敏感性
- 特征多了:提高模型效果,但是计算成本高,需要数据量大,否则会过拟合
- 特征少了:有欠拟合的风险
- 删除无用特征需要进行多重共线性判断(人力成本)