对数几率回归(logistic 回归)

写在前面:强烈推荐阅读此文提到的思考问题。

相关定义

对数几率分布

X是连续随机变量,X服从对数几率分布是X具有以下分布函数和密度函数(分布函数的导数):

F(x)=P(X\leq x)=\frac{1}{1+e^{-(x-\mu)/\gamma}}

f(x)=F^‘(x)=\frac{e^{-(x-\mu)/\gamma}}{\gamma(1+e^{-(x-\mu)/\gamma})^2}

其中,\gamma称为形状参数,值越小,在临界点附近增长的越快。

下图(来自《统计学习方法》-李航)为密度函数和分布函数的示意图:

logistic_2.png

条件概率

来源:https://blog.csdn.net/u014722627/article/details/70332459

对于一组随机变量,其中某些变量取特定值时,其余变量的分布称为条件概率分布。

假设数据集共有N个样本,记第i个样本输入(m维向量)和样本标签分别为x_i=[x_{i1},x_{i2},\cdots,x_{im}]^T,y_i \in\{0,1\},条件概率与参数w有关,正确分类的条件概率可以写为 P(y=y_i|x=x_i;w),简写为 P(y_i|x_i;w)

正确分类概率:

P(y_i|x_i;w)=\begin{cases} P(y=1|x_i;w), y_i=1\\P(y=0|x_i;w)=1-P(y=1|x_i,w), y_i=0\end{cases}\tag{s.1}

对正确分类概率取对数可以得到:

lnP(y_i|x_i;w)=\begin{cases} lnP(y=1|x_i;w), y_i=1\\lnP(y=0|x_i;w)=ln(1-P(y=1|x_i,w)), y_i=0\end{cases}\tag{s.2}

公式(s.2)等价于lnP(y_i|x_i;w)=\{y_i=1\}lnP(y=1|x_i;w)+\{y_i=0\}ln(1-P(y=1|x_i,w))

\{y_i=1\}称为示例函数,当条件满足时取1,条件不满足时取 0.

在二分类问题中,y_i表示满足\{y_i=1\}1-y_i表示满足{y_i=0},因此可以写为:

lnP(y_i|x_i;w)=y_ilnP(y=1|x_i;w)+(1-y_i)ln(1-P(y=1|x_i,w))

两边都取指数,可以得到:

P(y_i|x_i;w)=P(y=1|x_i;w)^{y_i}(1-P(y=1|x_i,w))^{1-y_i}

极大似然估计法

参考:
https://baike.baidu.com/item/%E6%9E%81%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1/3350286
https://wenku.baidu.com/view/0d9af6aa172ded630b1cb69a.html

极大似然估计法(the Principle of Maximum Likelihood )高斯费希尔(R.A.Figher)先后提出,是被使用最广泛的一种参数估计方法,该方法建立的依据是直观的极大似然原理

重要前提

训练样本的分布能够代表样本的真实分布(满足VC边界),每个样本集的样本都是独立同分布(iid)的随机变量,且有充分多的训练样本。

极大似然原理

在一次抽样中,若得到观测值 x_1,\cdots,x_n,则选择\hat \theta(x_1,\cdots,x_n)作为\theta的估计值。使得当 \theta=\hat \theta(x_1,\cdots,x_n)时,样本出现的概率最大。即 利用已知的样本结果,反推最有可能(最大概率,可以认为实验一次就出现的结果概率最大)导致这样结果的参数。

极大似然估计法(MLE)

若总体 X 为离散型

X 取值的概率分布律为:

P(X=x)=p(x,\theta)

其中,\theta为未知参数,设(X_1,\cdots,X_n)是取自总体的样本容量为 n 的样本,这组样本的一组观测值为(x_1,\cdots,x_n),可以得到样本X_1,\cdots,X_n 取到观测值x_1,\cdots,x_n的概率为:

L(\theta)=L(x_1,\cdots,x_n;\theta)= \Pi_{i=1}^n p(x_i;\theta)

这一概率随 \theta的取值而变化,称L(\theta)为样本的似然函数。

若总体X为连续型

X 的概率密度函数为f(x;\theta),其中,\theta为未知参数,设(X_1,\cdots,X_n)是取自总体的样本容量为 n 的样本,这组样本的一组观测值为(x_1,\cdots,x_n),可以得到样本X_1,\cdots,X_n 落到点x_1,\cdots,x_n的临边(边长分别为dx_1,\cdots,dx_n的n维立方体)内的概率近似为\Pi_{i=1}^n f(x_i;\theta)dx_i,则函数:

L(\theta)=\Pi_{i=1}^n f(x_i;\theta)dx_i

这一概率随 \theta的取值而变化,称L(\theta)为样本的似然函数。

极大似然估计值
如果 L(x_1,\cdots,x_n;\hat\theta)=max L(x_1,\cdots,x_n;\theta),则\hat \theta 为参数\theta的极大似然估计值。

形式变换

由于 LlnL有相同的极大值点,连乘操作很容易由于数据量较大导致数据溢出,因此可以考虑对似然函数求对数,由原来的乘法操作转换为加法操作。

求解步骤

  1. 写出似然函数,L(x_1,x_2,\cdots,x_n;\theta_1,\theta_2,\cdots,\theta_k)

  2. 对似然函数取对数,并整理;ln L(x_1,x_2,\cdots,x_n;\theta_1,\theta_2,\cdots,\theta_k)

  3. 对似然函数的对数对 \theta_1,\theta_2,\cdots,\theta_n求导,建立方程组:

    \frac{\partial lnL}{\partial \theta_i}=0,i=1,2,\cdots,k

  4. 求解方程组得到\hat\theta_i(i=1,2,\cdots,k)

类别不平衡

不平衡问题是指分类任务中不同类别的训练样本数目相差很多的情况。

缺少 高阶连续凸函数、梯度下降法、牛顿法的定义

模型推导

对数几率回归解决的是二分类问题。对于二分类问题,其输出标记为 y \in \{0,1\}

线性回归模型产生的预测值为实值,因此,将实值转换为 0/1 值即可通过线性回归实现对数几率回归。

最理想的转换方法为"单位阶跃函数",即:预测值大于 0 则取 1 ,预测值小于 0 则 取 0,预测值等于 0 可以任意判别。

![屏幕快照 2018-09-08 下午8.32.20.png](https://upload-images.jianshu.io/upload_images/3735998-8837149850838f27.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

但是由于“单位阶跃函数”不连续,因此选择近似“单位阶跃函数”的对数几率函数进行“替代”,对数几率函数连续并且单调可微,其表达式为:

y=\frac{1}{1+e^{-z}} \tag{1.1}

z=w^Tx+b代入,可以得到:

y=\frac{1}{1+e^{-(w^Tx+b)}} \tag{1.2}

式(1.2)可以整理为:

ln \frac{y}{1-y}=w^T+b \tag{1.3}

式(1.3)即为对数几率回归模型,其中,\frac{y}{1-y}称为“几率”,其中,y表示样本x作为正例的可能性,1-y表示样本 x 作为反例的可能性。对“几率”取对数,称为“对数几率”(log odds,也称作 logit ),即式(1.3)等号左侧的部分。

因此,式(1.3)中可以看做使用线性回归模型的预测结果逼近真实标记的“对数几率”。

由于式(1.3) y 表示样本 x 作为正例的可能性,1-y 表示样本 x 作为反例的可能性。如果将 y 看做后验概率估计 P(y=1|x),则有:

ln \frac{P(y=1|x)}{P(y=0|x)}=w^T+b \tag{1.4}

为了便于讨论,另\beta=(w;b)\hat x=(x;1),那么,w^Tx+b = \beta^T \hat x,结合 p(y=1|\hat x)+p(y=0|\hat x)=1,我们可以得到:

P(y=1|x)=\frac{e^{\beta^T\hat x}}{1+e^{\beta^T\hat x}} \tag{1.5}

P(y=0|x)=\frac{1}{1+e^{\beta^T\hat x}} \tag{1.6}

这里我们采用“极大似然法”来估计\beta值。

给定数据集 {(x_i,y_i)}_{i=1}^m,我们的目标是最大化“对数似然”:

l(\beta)=lnL(\beta)=ln \Pi_{i=1}^n p(y_i| x_i;\beta)=\sum_{i=1}^n ln p(y_i| x_i;\beta) \tag{1.7}

即令每一个样本属于真实样本的概率越大越好。

式(1.7)可以进一步写为:

\begin{split}l(\beta)&=\sum_{i=1}^nlnp(y_i|x_i;\beta)\\&=\sum_{i=1}^n\{y_iln[P(y=1|x_i;\beta)]+(1-y_i)ln[1-p(y=1|x_i;\beta)]\} \\&=\sum_{i=1}^n\{y_i\{ln[p(y=1|x_i;\beta)]-ln[1-p(y=1|x_i;\beta)]\}+ln[1-p(y=1|x_i;\beta)]\}\\&=\sum_{i=1}^n\{y_iln\frac{p(y=1|x_i;\beta)}{1-p(y=1|x_i;\beta)} +ln[1-p(y=1|x_i;\beta)]\}\\&=\sum_{i=1}^n\{y_iln(e^{\beta^T\hat x})+ln\frac{1}{1+e^{\beta^T\hat x}}\}\\&=\sum_{i=1}^n\{y_i\beta^T\hat x-ln(1+e^{\beta^T\hat x}) \}\end{split}\tag{1.8}

因此,我们的目标可以写为:

\beta^*=argmax [l(\beta)] = argmin [-l(\beta)] = argmin[\sum_{i=1}^N(-y_i\beta^T\hat x+ln(1+e^{\beta^T\hat x}))]\tag{1.9}

式(1.9)即为对数几率回归的目标函数,我们对该目标函数进行求解即可得到最优参数。

由于式(1.9)是关于 \beta 的高阶可导连续凸函数,根据凸优化理论,经典的数值优化算法如梯度下降法,牛顿法都可以对其进行求导。

softmax 回归

来源:http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92

参考:https://www.cnblogs.com/Deep-Learning/p/7073744.html

logistic回归模型 softmax回归模型
解决问题 二分类问题 多分类问题
类别 y^{(i)}\in{\{0,1\}} y^{(i)}\in{\{1,2,...,k\}} 注意:从1开始

logistic回归模型是 softmax回归模型 k=2 的特例。

对于给定的测试输入 x,假设函数针对每个类别 j 估算的概率为 p(y=j|x)。即 我们假设 函数输出一个 k 维向量(和为 1 ) 表示这 k 个估计的概率。用公式表示为:

屏幕快照 2018-09-08 下午8.32.20.png

其中,\theta_1, \theta_2 ,..., \theta_k \in \mathtt{R}^{n+1}\frac{1}{\sum_{j=1}^{k}e^{\theta_{j=1}^T}x^{(i)}}为归一化系数。

softmax的代价函数为:

屏幕快照 2018-09-08 下午8.43.25.png

其中:

屏幕快照 2018-09-08 下午8.46.32.png

该代价的函数的特点为有一个"冗余"的数据集,为了解决 softmax 回归参数冗余带来的数值问题,我们添加一个权重衰减项目 \frac{\lambda}{2}\sum_{i=1}^{k}\sum_{j=1}^n\theta_{ij}^2来修改代价函数,这个衰减项可以惩罚过大的参数,现在代价函数变为:

屏幕快照 2018-09-08 下午8.54.37.png

对于\J(\theta)的最小化问题,目前还没有闭式解法。因此,使用迭代的优化算法(例如梯度下降法,或 L-BFGS)。经过求导,可以得到梯度公式如下:

屏幕快照 2018-09-08 下午8.55.29.png

softmax 回归 vs k个二元分类器

如果类别之间相互排斥,使用 softmax 回归。

如果类别之间并不相互排斥,使用 k 个二元分类器。

类别不平衡的基本处理方法

基本策略--再缩放:

\frac{y^{'}}{1-y^{'}}=\frac{y}{1-y}*\frac{m^-}{m^+}

这里的 m^+ 表示训练集的正例数量,m^-表示训练集的反例数量,\frac{m^-}{m^+}表示观测几率。

但是我们从训练集的观测几率推断真实几率,现在技术上大体有三类做法:

  1. 直接对训练集里的反类样例进行“欠采样”,即去除一些反例使正、反例数目接近,再学习;代表算法 EasyEnsemble;
  2. 对训练集里的正类样例进行‘过采样’,即增加一些正例使正、反例数目接近,再学习;代表算法 SMOTE;
  3. 直接基于原始训练集进行学习,在用训练好的分类器进行预测时,将再缩放公式嵌入决策过程,称为“阈值移动”

sklearn 相关参数

原文:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression

sklearn.linear_model.LogisticRegression

Logistic Regression(又称为 logit, MaxEnt) 分类器。

对于多分类的情况,如果 “multi_class” 选项设置为‘ovr’,训练算法将使用 one-vs-rest(OvR)策略;如果 “multi_class” 选项设为 ‘multinormial’,则使用交叉熵损失(cross-entropy loss)(目前,只有‘lbfgs’、'sag' 和 'newton-cg' 算法支持“multinormial”)。

这个类使用 'liblinear' 库、'newton-cg' 、‘lbfgs’、'sag' 求解器实现了正则化 logistic 回归。既可以处理密集输入也可以处理稀疏输入。程序使用 64 位浮点型 C-ordered 序列或 CSR 矩阵以获得最佳性能,任何其他格式的输入都将转化为这种格式(并复制)。

'newton-cg' 、‘lbfgs’、'sag' 求解器只支持原始公式的 L2 正则化。 'liblinear' 求解器支持 L1 和 L2 正则化,并且只为 L2 惩罚提供对偶公式的求解。

更多内容见 用户指南

参数 意义 备注
penalty str,'l1' 或'l2'
用于指定正则化函数,'newton-cg' 、‘lbfgs’、'sag' 仅支持 l2
0.19版本新增加了支持 l1 惩罚的SAGA 求解器
dual bool,默认 False
对偶或原始公式。对偶公式只用于使用 liblinear 求解器的 l2 惩罚。
当n_samples>n_features (样本较多)时最好设置 dual = False
tol float,默认 1e-4
停止迭代的最小误差。
C float,默认 1.0
正则项系数的倒数,与支持向量机相似,值越小正则化影响越大。
必须为正浮点数
fit_intercept bool,默认 True
决策函数是否需要添加常数( 偏差或截距)。
intercept_scaling float,默认 1
只有使用 liblinear 算法并且 fit_intercept 设为True 时才有用,在这种情况下,x变为[x,self.intercept_scaling],即将值为 intercept_scaling 的“合成”特性添加到实例向量中,截距变为 intercept_scaling*synthetic_feature_weight。
合成特性权重与其它特性一样受 l1/l2 正则化影响。为了减少正则化对合成特性权重(以及截距)的影响,需要增大intercept_scaling。
class_weight dict 或者 'balanced',默认为 None。
{class_label:weight}格式的类别权重。如果没有给定,所有类别的权重都为1。
"balanced"模式使用 y 值自动校正权重,使其为输入数据出现频率的倒数,即 n_samples/(n_classes * np.bincount(y))。
如果指定了 sample_weight 则这些权重将与 sample_weight 相乘。
random_state int, RandomState 实例或 None,可选,默认:None
伪随机数发生器打乱数据时使用的种子(seed) 。如果为 int,random_state 表示随机数发生器的 seed 。如果为 RandomState 实例,random_state 表示随机数发生器。如果为 None,则使用 np.random 使用的RandomState 实例作为随机数发生器。
用于 solver 为”sag“或 ”liblinear“的情况。
solver str , {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}默认:'liblinear'
求解优化问题使用的算法。
小数据集使用”liblinear“是个不错的选择,但是”sag“和”saga“对于较大的数据集速度更快
多分类问题只能使用”newton-cg“,"sag","saga"和”lbfgs“处理多分类损失,”liblinear“限于 one-versus-rest方案。
"newton-cg","lbfgs"和”seg"只支持 L2 正则,“liblinear"和”saga“只支持 L1正则。
"sag"和"saga"快速卷积只有在特征规模大致相同时才能保证快速收敛。 可以使用sklearn.preprocessing的缩放器对数据进行预处理。
max_iter int,默认 100
只用于 newton-cg 、sag 和 lbfgs 算法。用于算法收敛的最大迭代次数。
multi_class str,{‘ovr’, ‘multinomial’,'auto'},默认: ‘ovr’
如果选择'ovr',将对每个标签进行二分类拟合。对于‘multinomial’,最小化损失为拟合整体概率分布的多分类损失(即使数据为二分类)。liblinear 算法不能使用 ‘multinomial’。
设置为'auth'时,如果数据为二分类或者 solver='liblinear',选择"ovr",其它情况使用’multinomial'
verbose int,默认:0
将 verbose 设置为正数来表示 liblinear 和 lbfgs 的冗余。
warm_start bool,默认 False
设置为 True 时,使用上一次调用的解来作为拟合的初始值,否则,只释放上次的解决方案。这项设置对 liblinear 算法不起作用。
n_jobs int,默认 1。
如果 multi_class='ovr'时并行计算类别时使用的处理器数量 。如果“solver"设置为 ”liblinear“,则无论是否设置了”multi_class“,这个参数都将被忽略。
除了 joblib.parallel_backend 之外 None 表示 1,如果值为 -1,则使用所有的处理器。详细内容见Glossary.

属性:

属性 意义 备注
coef_ array,格式:(1,n_features) 或(n_classes,n_features)
决策函数中特征的系数,二分类问题的 coef_ 格式为 (1,n_features)
intercept_ array,格式:(1,) 或(n_classes,)
决策函数的截距,如果 fit_intercept 设置为 False,截距为 0,二分类问题的 intercept_ 格式为(1,)
n_iter_ array,格式:(n_classes,)或 (1,)
所有类的实际迭代次数。对于二分类或多分类,只返回1个元素。 liblinear算法只返回所有类的迭代值的最大值。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容

  • https://developers.google.com/machine-learning/crash-cour...
    iOSDevLog阅读 2,651评论 1 11
  • ‌六分一刻,醒的早。洗刷完毕,已经整装待发,打开窗口,天阴有微风,跑步很不错,回来吃个早餐洗个澡,然后去逛。然而,...
    长卿Aaron阅读 149评论 0 0
  • 一 “你能听说我几句话吗?就几句就行”。她正看着书,手机屏幕亮起这样一行字。 她合上书便回了过去,“怎么了?说来听...
    鱼念柒月阅读 405评论 0 3
  • 我的脸上每天都会产生很多种表情,每一个表情背后都有不同感受,也代表着不同的心情。 ...
    吴卓逸阅读 396评论 0 1
  • 你有你的向往, 我有我的信仰。 爱过,笑过,痛过, 伤过,碎过,路过。 你来、不增不减, 你走、不卑不泣。
    风过如初阅读 216评论 0 0