逻辑回归


一、逻辑回归(二元分类)

1、决策函数(分类器)

  • 基本思想
    • 建立输入x(特征)和输出y的映射关系,用于对未知或者无法观测的数据进行预测,即我们所需要的模型
  • 表达式
    • h θ ( x ) = f ( θ T x ) , f ( z ) = 1 1 + e − z ⇒ P ( y = 1 ∣ x ; θ ) = h θ ( x ) = 1 1 + e − θ T X h_\theta(x) = f(\theta^Tx), f(z) = \frac{1}{1+e^{-z}} \Rightarrow P(y=1|x;\theta)= h_\theta(x) = \frac{1}{1+e^{-\theta^{T}X}} hθ(x)=f(θTx)f(z)=1+ez1P(y=1x;θ)=hθ(x)=1+eθTX1
    • 此处函数 f f f非线性映射函数sigmoid(经常用它将实数空间的数映射 ( 0 , 1 ) (0, 1) (0,1)区间),相应的决策函数为
      y ∗ = 1 ,   if  P ( y = 1 ∣ x ; θ ) = h θ ( x ) > 0.5 \qquad \qquad \qquad y^* = 1,\, \textrm{if} \ P(y=1|x;\theta)= h_\theta(x) > 0.5 y=1if P(y=1x;θ)=hθ(x)>0.5
      选择0.5作为阈值是一个一般的做法,实际应用时特定的情况可以选择不同阈值,如果对正例的判别准确性要求高,可以选择阈值大一些,对正例的召回率要求高,则可以选择阈值小一些。
  • 分类界面
    • 经过特征抽取(构造一个新的特征空间,并将原始特征投影在新的空间中)后,一个样本可以表示为k维特征空间的一个点,寻找一些超平面将这个特征空间分为一些互不重叠的子区域,使得不同类别的点分布在不同的子区域中,这些超平面就成为了判别界面。在二维空间中,分类界面为一条直线;在三维空间中,分类界面为一个平面;在高维空间中,分类界面为一个超平面
    • 当我们的阈值选择为 h θ ( x ) = 0.5 h_\theta(x) = 0.5 hθ(x)=0.5时,从sigmoid函数可以看出,此时 θ T X = 0 \theta^{T}X = 0 θTX=0就是模型的分类界面。当 θ T X > 0 \theta^{T}X >0 θTX>0,即 h θ ( x ) > 0.5 h_\theta(x) > 0.5 hθ(x)>0.5 时, y = 1 y=1 y=1,否则 y = 0 y=0 y=0。所以,逻辑回归可以看作为广义线性模型,只需找到一个单调可微函数(eg: sigmoid函数—求输入空间到输出空间的非线性函数映射-----特征提取)将分类任务的真实标记 y y y与线性回归模型的预测值联系起来即可。

2、交叉熵损失函数(Cross Entropy Loss Function)

  • 基本思想
    • 损失函数用于衡量决策函数的好坏,定量的计算错误的程度,选择出使损失函数值最小的模型参数
  • 表达式
    • J ( θ ) = − 1 m ∑ i = 1 m ( y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) J(\theta) = -\frac{1}{m} \sum_{i=1}^{m}(y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log (1-h_\theta(x^{(i)}) ) J(θ)=m1i=1m(y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))
    • 此处的 log ⁡ x \log x logx函数在matlab中默认的是以e为底的函数,即 log ⁡ e x \log_ex logex
  • 选择交叉熵损失函数的直观理解
    • 交叉熵损失函数是凸函数(加入正则项后是严格凸函数-----见最后QA中凸函数的定义),可以保证我们找到的局部最优值同时是全局最优。 PS: 不再使用MSE损失函数的原因是:将 h θ ( x ) = 1 1 + e − θ T X h_\theta(x) = \frac{1}{1+e^{-\theta^{T}X}} hθ(x)=1+eθTX1代入后,损失函数是非凸的了,此时将存在许多局部最小值,这将影响参数学习算法(SGD) 寻找全局最优解。
    • 当实际的 y = 1 y=1 y=1 h θ h_\theta hθ 也为 1 1 1时误差为 0 0 0,当 y = 1 y=1 y=1 h θ h_\theta hθ 不为 1 1 1时误差随着 h θ h_\theta hθ 的变小而变大;当实际的 y = 0 y=0 y=0 h θ h_\theta hθ 也为 0 0 0 时代价为 0 0 0,当 y = 0 y=0 y=0 h θ h_\theta hθ 不为 0 0 0时误差随着 h θ h_\theta hθ 的变大而变大。因此交叉熵损失函数能够很好的衡量决策函数的好坏。

3、参数学习算法(BGD—Batch Gradient Descent)

  • 学习算法
    • 采用批量梯度下降算法(BGD)来求损失函数最小值,这种算法的缺点是每次迭代更新参数都要用到所有的训练集,改进可用随机梯度下降(SGD-–Stochastic Gradient Descent ,每次迭代更新参数只用一个样本)或者用(Mini-Batch SGD,每次迭代更新参数用一个Batch的样本)
  • 梯度下降的步骤
  • 随机参数初始化(不同的初始化参数组合可能找到不同的局部最小值)
  • Learning Rate的选择(决定着我们沿着损失函数下降程度最大的方向迈出的步子有多大), 通常可由线性搜索算法来确定。
  • 沿着梯度下降最多的方向更新权值(参数需要同时更新
  • 达到所设定迭代次数或者损失函数小于所设定的阈值则停止更新参数
  • Advanced optimization(高级优化算法)
    • 共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS) fminunc。使用时我们只需提供 损失函数 J ( θ ) J(\theta) J(θ)其对每个参数的导数 ∂ J ( θ ) ∂ θ j   f o r   j = 0 , 1 , . . . , n \frac{\partial J(\theta)}{\partial \theta_j} \ for \, j = 0,1,...,n θjJ(θ) forj=0,1,...,n 即可。
    • 这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。
    • matlab 中使用 fminunc 函数进行优化的代码示例:
%% 计算损失函数和偏导数
function [J, grad] = lrCostFunction(theta, X, y, lambda)

% Initialize some useful values
m = length(y); 				% number of training examples
J = 0;
grad = zeros(size(theta));


theta_1=[0;theta(2:end)];    % 先把theta(1)拿掉,不参与正则化
J= -1 * sum( y .* log( sigmoid(X*theta) ) + (1 - y ) .* log( (1 - sigmoid(X*theta)) ) ) / m  + lambda/(2*m) * theta_1' * theta_1 ;
grad = ( X' * (sigmoid(X*theta) - y ) )/ m + lambda/m * theta_1 ;

end


%% 利用matlab自带的优化函数进行求解最优参数
options = optimset('GradObj', 'on', 'MaxIter', '400'); 
initial_theta = zeros(size(X, 2), 1);
[optTheta, functionVal, exitFlag] = fminunc(@lrcostFunction, initialTheta, options); 

二、多元分类的方法(C类)

  1. One-vs-Rest
    • 把多类问题转换为C个两类分类的问题,够建C个一对多的分类器
    • 对每一个输入变量,都将这C个One-vs-All分类器运行一遍,得出C个概率,然后选出概率最大的 P m a x P_{max} Pmax所在类别,即为输入变量所属类别
  2. One-vs-One
    • 把多类分类的问题转化为 C n 2 = C ( C − 1 ) / 2 C_n^{2} = C(C-1)/2 Cn2=C(C1)/2个两类分类问题,构建 C ( C − 1 ) / 2 C(C-1)/2 C(C1)/2个两两分类器
    • 对每一个输入变量,都将这 C ( C − 1 ) / 2 C(C-1)/2 C(C1)/2个两两分类器运行一遍,然后选出得分最高的所在类别,即为输入变量所属类别
  3. One-vs-Rest和One-vs-One的预测过程
    • 最终结果通过通过投票产生:即把概率最大的 P m a x P_{max} Pmax所在类别或者被预测得最多的类别作为最终分类结果,具体操作如下图所示:(引自:机器学习—周志华)

vote

  1. Softmax Regression(UFLDL)
  • 以上两种转化方式都存在一个缺陷:空间中存在一些区域,这些区域中的点的类别是不能确定的。如果用两个分类器对这些点进行分类,然后进行投票时,会发现有两个或者更多个类别的得分是一样的。
  • 解决办法:直接建立多类线性分类器,使用Softmax Regression解决,具体可参考第3点的斯坦福UFLDL教程。
  • Softmax 回归 vs. k 个二元分类器:取决于所有类别之间是否互斥。所有类别之间明显互斥用softmax分类器,所有类别之间不互斥有交叉的情况下最好用个logistic分类器。

三、正则化(Regularization)

  • 正则化是为了降低模型的复杂度(主要通过降低参数绝对值的大小),从而避免模型区过分拟合训练数据,包括噪声与异常点(outliers)。模型复杂体现在两个方面,一是参数过多,二是参数值过大。参数值过大会导致导数非常大,那么拟合的函数波动就会非常大。
  • L 2 L2 L2正则化,它对于最后的特征权重的影响是,尽量打散权重到每个特征维度上,不让权重集中在某些维度上,出现权重特别高的特征。
  • L 1 L1 L1正则化,它对于最后的特征权重的影响是,让特征获得的权重稀疏化,也就是对结果影响不那么大的特征,干脆就拿不着权重。
  • 关于正则化为什么能够防止过拟合?可以参考博文6和7

四、QA

  1. 分类的概念

    • 在监督学习中,当输出变量Y取有限个离散值时,预测问题便成为分类问题,这时,输入变量X可以是离散的,也可以是连续的。
  2. 逻辑回归的主要思想及目的

    • 主要思想:根据现有数据对分类边界线建立回归公式,以此进行分类
    • 主要目的:寻找一个非线性函数(Sigmoid)的最佳拟合参数
    • 逻辑的来源:sigmoid 函数,也称 logistic 函数
    • 回归的来源:用对数几率去拟合,它分析的是自变量 x 与因变量 y(概率) 之间的关系
      在这里插入图片描述
  3. 为什么需要用逻辑回归算法做分类,不可用线性回归选定阈值后再去做分类吗?

    • 一般来说,线性回归不用在分类问题上,因为线性回归是连续型模型,而且受噪声影响比较大,当数据中有比较大的噪声(离群点)的时候,此时模型预测的值将 超越[0, 1] 的范围,误差也将比较大,不适合做分类任务。
    • 逻辑回归的成功之处在于,将原本输出结果范围可以非常大的 θ T X \theta^{T}X θTX 通过 sigmoid函数映射 到(0,1),从而完成概率的估测
    • 理论上说,只要我们的 h θ ( x ) h_\theta(x) hθ(x)设计足够合理,准确的说是 f ( θ T X ) f(\theta^{T}X) f(θTX) θ T X \theta^{T}X θTX足够复杂(特征映射),我们能在不同的情形下,拟合出不同的判定边界,从而把不同的样本点分隔开来,解决分类问题。
  4. 什么是类别不平衡问题?怎样解决?

    • 类别不平衡就是指分类任务中不同类别的训练样例数目差别很大。解决办法有:欠采样、过采样、阈值移动。(引自:机器学习—周志华)
  5. 凸函数的定义

    • 对于区间 [ a , b ] [a, b] [a,b]上定义的函数 f f f,若它对区间中任意两点 x 1 , x 2 x_1, x_2 x1,x2均有 f ( x 1 + x 2 2 ) ⩽ f ( x 1 ) + f ( x 2 ) 2 f(\frac{x_1+x_2}{2})\leqslant \frac{f(x_1)+f(x_2)}{2} f(2x1+x2)2f(x1)+f(x2),则称 f f f为区间 [ a , b ] [a, b] [a,b]上的凸函数。
    • 对于实数集上的函数,可以通过求二阶导数来判别:若二阶导数在区间上非负,则称为凸函数;若二阶导数在区间上恒大于0,则成为严格凸函数。

五、参考文献

1、机器学习系列(1)_逻辑回归初步(寒小阳-----深度解读)
2、机器学习系列(2)_从初等数学视角解读逻辑回归
3、机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾
4、Logistic Regression 模型简介(美团点评技术团队)
5、UFLDL—Softmax Regression
6、逻辑回归与其他模型的关系
7、正则化为什么能够防止过拟合

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值