逻辑回归(LR)

基本原理

逻辑回归(Logistic Regression,LR)也称为"对数几率回归",又称为"逻辑斯谛"回归。

知识点提炼

  • 分类,经典的二分类算法!
  • 逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。
  • Logistic 回归实际上是一种分类方法,主要用于两分类问题
  • 回归模型中,y 是一个定性变量,比如 y = 0 或 1,logistic 方法主要应用于研究某些事件发生的概率。
  • 逻辑回归的本质:极大似然估计
  • 逻辑回归的激活函数:Sigmoid
  • 逻辑回归的代价函数:交叉熵

逻辑回归的优缺点

优点:

1)速度快,适合二分类问题

2)简单易于理解,直接看到各个特征的权重

3)能容易地更新模型吸收新的数据

缺点:

对数据和场景的适应能力有局限性,不如决策树算法适应性那么强

逻辑回归中最核心的概念是 Sigmoid 函数,Sigmoid函数可以看成逻辑回归的激活函数。

下图是逻辑回归网络:

Logistic Regression.png

对数几率函数(Sigmoid):y=σ(z)=11+ezy = \sigma (z) = \frac{1}{1+e^{-z}}

img

通过对数几率函数的作用,我们可以将输出的值限制在区间[0,1]上,p(x) 则可以用来表示概率 p(y=1|x),即当一个x发生时,y被分到1那一组的概率。

Regression 常规步骤

  1. 寻找h函数(即预测函数)
  2. 构造J函数(损失函数)
  3. 想办法(迭代)使得J函数最小并求得回归参数(θ)

函数h(x)的值有特殊的含义,它表示结果取1的概率,于是可以看成类1的后验估计。因此对于输入x分类结果为类别1和类别0的概率分别为:

P(y=1│x;θ)=hθ (x)

P(y=0│x;θ)=1-hθ (x)

代价函数

逻辑回归一般使用交叉熵作为代价函数

交叉熵代价函数如下所示:

J(w)=l(w)=i=1ny(i)ln(ϕ(z(i)))+(1y(i))ln(1ϕ(z(i)))J(w)=-l(w)=-\sum_{i = 1}^n y^{(i)}ln(\phi(z^{(i)})) + (1 - y^{(i)})ln(1-\phi(z^{(i)}))

J(ϕ(z),y;w)=yln(ϕ(z))(1y)ln(1ϕ(z))J(\phi(z),y;w)=-yln(\phi(z))-(1-y)ln(1-\phi(z))

注:为什么要使用交叉熵函数作为代价函数,而不是平方误差函数?请参考:逻辑回归算法之交叉熵函数理解

避免陷入局部最优解

逻辑回归伪代码

初始化线性函数参数为1
构造sigmoid函数
重复循环I次
	计算数据集梯度
	更新线性函数参数
确定最终的sigmoid函数
输入训练(测试)数据集
运用最终sigmoid函数求解分类

为什么 LR 要使用 sigmoid 函数?

1.广义模型推导所得 2.满足统计的最大熵模型 3.性质优秀,方便使用(Sigmoid函数是平滑的,而且任意阶可导,一阶二阶导数可以直接由函数值得到不用进行求导,这在实现中很实用)

f(x)=f(x)[1f(x)]=F(f(x))f'(x) = f(x)[1 - f(x)]=F(f(x))

f(x)=f(x)[1f(x)][12f(x)]f''(x) = f(x)[1-f(x)][1-2f(x)]

参考资料

LR 可以用核函数么?

不能,loss没法转为简易求解

SVM的loss函数为

12w2i=1N(αiyi(wx+b1))\frac{1}{2}\|w\|^{2}-\sum_{i=1}^{N}\left(\alpha_{i} y_{i}(w x+b-1)\right)

W,bW,b求偏导置为0:

12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi-\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)+\sum_{i=1}^{N} \alpha_{i}

如果加上核函数的话,式一中的xx替换为ϕ(x)\phi(x),式二中的xixjx_ix_j替换为ϕ(xi)Tϕ(xj)\phi(x_i)T\phi(x_j)

因为核函数满足条件

κ(xikj)=φ(xi)Tφ(xj)κ(xi·kj)=φ(xi)T·φ(xj)

可以简化计算。

为什么 LR 用交叉熵损失而不是平方损失?

请参考:逻辑回归算法之交叉熵函数理解

避免陷入局部最优解

LR 能否解决非线性分类问题?

  • TODO

参考资料

LR为什么要离散特征?

  • 稀疏向量内积乘法运算速度快,计算结果方便存储,容易scalable(扩展)。

  • 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。

  • 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。

  • 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。

  • 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。

逻辑回归是处理线性问题还是非线性问题的?

逻辑回归以线性回归为理论支持的,本质上是线性回归模型,

支持向量机(SVM)

基本原理

支持向量机(supporr vector machine,SVM)是一种二类分类模型,该模型是定义在特征空间上的间隔最大的线性分类器。间隔最大使它有区别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的最小化问题。

知识点提炼:

  • SVM核函数
    • 多项式核函数
    • 高斯核函数
    • 字符串核函数
  • SMO
  • SVM损失函数

支持向量机的学习算法是求解凸二次规划的最优化算法。

支持向量机学习方法包含构建由简至繁的模型:

  • 线性可分支持向量机
  • 线性支持向量机
  • 非线性支持向量机(使用核函数)

当训练数据线性可分时,通过硬间隔最大化(hard margin maximization)学习一个线性的分类器,即线性可分支持向量机,又成为硬间隔支持向量机;

当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization)也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;

当训练数据不可分时,通过核技巧(kernel trick)及软间隔最大化,学习非线性支持向量机。

注:以上各SVM的数学推导应该熟悉:硬间隔最大化(几何间隔)—学习的对偶问题—软间隔最大化(引入松弛变量)—非线性支持向量机(核技巧)。

SVM的主要特点

(1)非线性映射-理论基础

(2)最大化分类边界-方法核心

(3)支持向量-计算结果

(4)小样本学习方法

(5)最终的决策函数只有少量支持向量决定,避免了“维数灾难”

(6)少数支持向量决定最终结果—->可“剔除”大量冗余样本+算法简单+具有鲁棒性(体现在3个方面)

(7)学习问题可表示为凸优化问题—->全局最小值

(8)可自动通过最大化边界控制模型,但需要用户指定核函数类型和引入松弛变量

(9)适合于小样本,优秀泛化能力(因为结构风险最小)

(10)泛化错误率低,分类速度快,结果易解释

SVM为什么采用间隔最大化?

当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。

感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。

线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。

然后应该借此阐述,几何间隔,函数间隔,及从函数间隔—>求解最小化1/2 ||w||^2 时的w和b。即线性可分支持向量机学习算法—最大间隔法的由来。

为什么要将求解SVM的原始问题转换为其对偶问题?

  1. 对偶问题往往更易求解(当我们寻找约束存在时的最优点的时候,约束的存在虽然减小了需要搜寻的范围,但是却使问题变得更加复杂。为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。)
  2. 自然引入核函数,进而推广到非线性分类问题

为什么SVM要引入核函数?

当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。

SVM核函数有哪些?

  • 线性(Linear)核函数:主要用于线性可分的情形。参数少,速度快。
  • 多项式核函数
  • 高斯(RBF)核函数:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。
  • Sigmoid核函数
  • 拉普拉斯(Laplac)核函数

注:如果feature数量很大,跟样本数量差不多,建议使用LR或者Linear kernel的SVM。如果feature数量较少,样本数量一般,建议使用Gaussian Kernel的SVM。

SVM如何处理多分类问题?

一般有两种做法:

  1. 直接法:直接在目标函数上修改,将多个分类面的参数求解合并到一个最优化问题里面。看似简单但是计算量却非常的大。
  2. 间接法:对训练器进行组合。其中比较典型的有一对一,和一对多。
    • 一对多:对每个类都训练出一个分类器,由svm是二分类,所以将此而分类器的两类设定为目标类为一类,其余类为另外一类。这样针对k个类可以训练出k个分类器,当有一个新的样本来的时候,用这k个分类器来测试,那个分类器的概率高,那么这个样本就属于哪一类。这种方法效果不太好,bias比较高。
    • 一对一:针对任意两个类训练出一个分类器,如果有k类,一共训练出C(2,k) 个分类器,这样当有一个新的样本要来的时候,用这C(2,k) 个分类器来测试,每当被判定属于某一类的时候,该类就加一,最后票数最多的类别被认定为该样本的类。

SVM中硬间隔和软间隔

硬间隔分类即线性可分支持向量机,软间隔分类即线性不可分支持向量机,利用软间隔分类时是因为存在一些训练集样本不满足函数间隔(泛函间隔)大于等于1的条件,于是加入一个非负的参数 ζ (松弛变量),让得出的函数间隔加上 ζ 满足条件。于是软间隔分类法对应的拉格朗日方程对比于硬间隔分类法的方程就多了两个参数(一个ζ ,一个 β),但是当我们求出对偶问题的方程时惊奇的发现这两种情况下的方程是一致的。下面我说下自己对这个问题的理解。

我们可以先考虑软间隔分类法为什么会加入ζ 这个参数呢?硬间隔的分类法其结果容易受少数点的控制,这是很危险的,由于一定要满足函数间隔大于等于1的条件,而存在的少数离群点会让算法无法得到最优解,于是引入松弛变量,从字面就可以看出这个变量是为了缓和判定条件,所以当存在一些离群点时我们只要对应给他一个ζi,就可以在不变更最优分类超平面的情况下让这个离群点满足分类条件。

综上,我们可以看出来软间隔分类法加入ζ 参数,使得最优分类超平面不会受到离群点的影响,不会向离群点靠近或远离,相当于我们去求解排除了离群点之后,样本点已经线性可分的情况下的硬间隔分类问题,所以两者的对偶问题是一致的。

手撕SVM

参考链接

LR 与 SVM的区别和联系

相同点

第一,LR和SVM都是分类算法。

第二,如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的。

第三,LR和SVM都是监督学习算法。

第四,LR和SVM都是判别模型。

判别模型会生成一个表示P(Y|X)的判别函数(或预测模型),而生成模型先计算联合概率p(Y,X)然后通过贝叶斯公式转化为条件概率。简单来说,在计算判别模型时,不会计算联合概率,而在计算生成模型时,必须先计算联合概率。或者这样理解:生成算法尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类。常见的判别模型有:KNN、SVM、LR,常见的生成模型有:朴素贝叶斯,隐马尔可夫模型。当然,这也是为什么很少有人问你朴素贝叶斯和LR以及朴素贝叶斯和SVM有什么区别(哈哈,废话是不是太多)。

不同点

第一,本质上是其损失函数(loss function)不同。

注:lr的损失函数是交叉熵损失 cross entropy loss, adaboost的损失函数是指数损失 expotional loss ,svm是铰链损失函数hinge loss,常见的回归模型通常用 均方误差 loss。

第二,支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)

第三,在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。

第四,线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响。

第五,SVM的损失函数就自带正则!!!(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因!!!而LR必须另外在损失函数上添加正则项!!!

SVM与LR的区别与联系

联系:(1)分类(二分类) (2)可加入正则化项

区别:

(1)LR–参数模型;SVM–非参数模型?

(2)目标函数:LR—logistical loss;SVM–hinge loss

(3)SVM–support vectors;LR–减少较远点的权重

(4)LR–模型简单,好理解,精度低,可能局部最优;SVM–理解、优化复杂,精度高,全局最优,转化为对偶问题—>简化模型和计算 (5)LR可以做的SVM可以做(线性可分),SVM能做的LR不一定能做(线性不可分)

总结一下

  • Linear SVM和LR都是线性分类器
  • Linear SVM不直接依赖数据分布,分类平面不受一类点影响;LR则受所有数据点的影响,如果数据不同类别strongly unbalance,一般需要对数据先做balancing。
  • Linear SVM依赖数据表打对距离测度,所以需要对数据先做normalization;LR不受影响
  • Linear SVM依赖penalty的系数,实验中需要做validation
  • Linear SVM的LR的performance都会收到outlier的影响,就敏感程度而言,无法给出明确结论。

Boosting系列

Boosting提升算法:将弱学习算法提升为强学习算法的过程,主要涉及两个部分:加法模型和向前分步算法。

加法模型就是说强分类器由一系列弱分类器线性相加而成。一般组合形式如下:

FM(x;P)=m=1nβmh(x;am)F_{M}(x ; P)=\sum_{m=1}^{n} \beta_{m} h\left(x ; a_{m}\right)

其中,h(𝑥;𝑎𝑚)ℎ(𝑥;𝑎_𝑚) 就是一个个的弱分类器,ama_m是弱分类器学习到的最优参数,βm\beta _ m就是弱学习在强分类器中所占比重,PP是所有ama_mβm\beta _ m的组合。这些弱分类器线性相加组成强分类器。

前向分步就是说在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。也就是可以写成这样的形式:

Fm(x)=Fm1(x)+βmhm(x;am)F_{m}(x)=F_{m-1}(x)+\beta_{m} h_{m}\left(x ; a_{m}\right)

由于采用的损失函数不同,Boosting算法也因此有了不同的类型,AdaBoost就是损失函数为指数损失的Boosting算法。

AdaBoost

基于Boosting的理解,对于AdaBoost,我们要搞清楚两点:

  1. 每一次迭代的弱学习h(x;am)h\left(x ; a_{m}\right)有何不一样,如何学习?
  2. 弱分类器权值βm\beta _ m如何确定?

对于第一个问题,AdaBoost改变了训练数据的权值,也就是样本的概率分布,其思想是将关注点放在被错误分类的样本上,减小上一轮被正确分类的样本权值,提高那些被错误分类的样本权值。然后,再根据所采用的一些基本机器学习算法进行学习,比如逻辑回归。

对于第二个问题,AdaBoost采用加权多数表决的方法,加大分类误差率小的弱分类器的权重,减小分类误差率大的弱分类器的权重。这个很好理解,正确率高分得好的弱分类器在强分类器中当然应该有较大的发言权。

image-20210219101859212

梯度提升树(GBDT)

简单易学的机器学习算法——梯度提升决策树GBDT

KNN

如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

1)计算测试数据与各个训练数据之间的距离;

2)按照距离的递增关系进行排序;

3)选取距离最小的K个点;

4)确定前K个点所在类别的出现频率;

5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

K-Means

选择K个点作为初始质心  
repeat  
    将每个点指派到最近的质心,形成K个簇  
    重新计算每个簇的质心  
until 簇不发生变化或达到最大迭代次数  

PCA

设有m条n维数据。

1)将原始数据按列组成n行m列矩阵X

2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

3)求出协方差矩阵C=1mXXC=\frac{1}{m} X X^{\top}

4)求出协方差矩阵的特征值及对应的特征向量

5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

6)Y=PXY=P X即为降维到k维后的数据

本质为协方差矩阵(实对称矩阵)的对角化

线性判别分析LDA

每个数据集的样本有类别输出

投影后类内方差最小,类间方差最大

img
瑞利商:

R(A,x)=xHAxxHxR(A, x)=\frac{x^{H} A x}{x^{H} x}

A为Hermitan矩阵,即共轭转置矩阵和自己相等,即AH=AA^H=A

满足:

λminxHAxxHxλmax\lambda_{\min } \leq \frac{x^{H} A x}{x^{H} x} \leq \lambda_{\max }

广义瑞利商:

R(A,Bx)=xHAxxHBxR(A,B,x)=\frac{x^{H} A x}{x^{H} B x}

化简:

R(A,B,x)=xHB1/2AB1/2xxHxR\left(A, B, x^{\prime}\right)=\frac{x^{\prime H} B^{-1 / 2} A B^{-1 / 2} x^{\prime}}{x^{\prime H} x^{\prime}}

其中x=B1/2xx=B^{-1 / 2} x^{\prime}

二类LDA:

类内散度矩阵:

Sw=Σ0+Σ1=xX0(xμ0)(xμ0)T+xX1(xμ1)(xμ1)TS_{w}=\Sigma_{0}+\Sigma_{1}=\sum_{x \in X_{0}}\left(x-\mu_{0}\right)\left(x-\mu_{0}\right)^{T}+\sum_{x \in X_{1}}\left(x-\mu_{1}\right)\left(x-\mu_{1}\right)^{T}

类间散度矩阵:

Sb=(μ0μ1)(μ0μ1)TS_{b}=\left(\mu_{0}-\mu_{1}\right)\left(\mu_{0}-\mu_{1}\right)^{T}

优化目标:

argmaxwJ(w)=wTSbwwTSww\underbrace{\arg \max }_{w} J(w)=\frac{w^{T} S_{b} w}{w^{T} S_{w} w}

奇异值分解SVD

假设我们的矩阵A是一个m×nm \times n的矩阵,那么我们定义矩阵A的SVD为:

A=UΣVTA=U \Sigma V^{T}