机器学习 15、分类算法 -LR

你挡我一时,挡不了我一世

发布日期: 2019-05-08 22:26:17 浏览量: 848
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

前文链接:https://write-bug.com/article/2439.html

逻辑回归

前节中,我们分析了什么是分类以及机器学习的模型介绍、NB算法的应用、和二分类模型的评估。我们在这里再次总结一下机器学习的要素(括号内是对于LR而言):

  • 机器学习
    用数据训练出模型再应用的过程

  • 训练集
    训练所用的输入与输出

  • 测试集
    评估所用的输入与输出

  • 监督学习
    机器学习中,分为监督学习和非监督式学习,而监督式学习就是数据集有着明确的答案(即label),可供后续寻找输入输出之间的关系(误差)

  • 模型
    描述输入输出之间关系的方式(等式参数)

  • 训练
    学习输入输出之间关系的过程

  • 预测
    解决输入的预期输出的过程

  • 评估
    衡量模型好坏的过程

  • 泛化能力
    对一个前所未见的输入可以给出一个正确的预测

在谈LR之前,我们需要介绍一些铺垫知识:

一元线性回归

何为回归为题?假如有一二维坐标系,横坐标x:西瓜重量,纵坐标y:西瓜价格,上面散落着一些点,即每个西瓜重量都有着对应的价格。如下图:

那我如何根据这些数据,获取到一些规律,每次随意给我一个西瓜重量我都可以预测一个合理价格出来呢?我们需要像图中绿色的那条线一样,尽力去拟合所有数据,即 y=wx+b,给定x西瓜重量,返回y西瓜价格,未知参数:w,b。

在上图中我们可以看到很多data点,同样的也就可以画出很多条线,那我们如何才能找到最可以拟合所有数据的最优线呢?我们可以给每个点和每条线之间都求取点到线的距离,即线没有拟合点的误差值,那么当我们找最优线的时候,我们把每次和这条线求的所有误差值加起来,看谁最小就好了,即最小化误差平方和:

  1. ∑((wx+b) - y)^2

即loss function 找出最优参数,获取最优线。

  1. Error = y - y^

那么如何求取最优参数?因为lossfunc为二次方程,坐标系中为下凸函数,所以求导=0就可以得出极小值:最优参数w,b

  • 模型输出:y^=wx+b

  • 模型参数:w,b

多元线性回归

在一元中,我们输入x为一个单因素值,即标量。在多元中,我们输入的x为多因素值,即向量。那么什么情况为多因素值呢?比如还是西瓜,那我的西瓜价格不只是重量影响着,还有颜色,拍的响声等等,而这些因素就是西瓜的特征,而西瓜在这里成为样本。

但是这种多维度向量并不能在二维坐标系中显示,每个样本都有着多维度特征,可以想象,像二维坐标系中显示一样,在高纬度空间中散落着这些点,如果要做回归问题,就需要有一个超平面拟合这些数据点,如果做分类问题则需要一个超平面去尽力把两类样本点分开,而这里的西瓜问题是个回归问题。而这个超平面也就意味着我们的参数也变成了多维向量。即:

  1. X[x1,x2,x3...xn]
  2. W[w1,w2,w3,...wn]

wx向量相乘是求内积。

之前我们的等式y=wx+b,在机器学习中有了些新的名称:

  • X:样本特征向量

  • W:权重向量

  • B:偏置

比如:

  • X样本为一个西瓜,那么西瓜的特征可能有:重量、颜色、响声、把的位置等等

  • W权重即这些特征的重要程度,每个特征的权重都影响着最后的score

  • B偏置的意思就是比如说各个地区的西瓜长得样子普遍不一样,那对于这类样本来说给他一个惩罚值平衡样本数据

同样的,我们得到多元回归方程:

  1. 𝑓(𝑥𝑖,𝑤,𝑏) = ∑𝑤𝑗𝑥𝑖𝑗 + 𝑏 = [𝑥𝑖1 𝑥𝑖𝑘][𝑤1 𝑤𝑘]+ 𝑏 = 𝑤𝑖𝑥 + 𝑏

我们把b约去得到:

  1. 𝑓(𝑥𝑖,𝑤,𝑏) = [𝑥𝑖1 𝑥𝑖𝑛][𝑤1 𝑤𝑛]+ 𝑏 = [𝑥𝑖1 𝑥𝑖𝑛 1][𝑤1 𝑤𝑛 𝑏]= 𝑤 · 𝑥𝑖

所以只需要求:

  1. 𝑓(𝑥𝑖,𝑤) = 𝑤𝑥

和前面一样,为了求取最优参数,需要最小化误差平方和:

  1. min 𝑤 𝐿(𝑤) = (𝑤𝑥𝑖 𝑦𝑖)^2------》e

只不过单因素标量变成了多因素向量了而已。

同样,求导=0,但是这里w也是个向量, 根据微积分公式需要对每个w特征权重求偏导,得出:

  1. W=(XTX)^-1 XTY

XT为X向量的转置,Y为输出后的向量

当XT X 不可逆时,设定正数λ,W=(XTX + λI)^-1 XTY

逻辑回归

逻辑回归,logistic回归,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。常用于二分类问题,而多分类问题常用SoftMax函数来解决。

上节说过,二分类问题也就是01问题,比如判断一个人是男是女,可以从多个特征来分辨:肤色、身高、体重、音色等等,每个特征都有自己的权重,像前面一样代表各个特征的影响度。

设定1为男性,0为女性,则P(y=1|x)代表男性的概率,P(y=0|x)代表女性的概率。通常情况下,我们研究正例的概率,也就是y=1的概率,那么有:

  1. Py=1|x)=f(x)

这里的输入和前面的多元线性回归一样,但是输出是一个score,即

  1. f(x)=wx

但是这里的score也就是y是一条直线,值域是(-∞,+∞),而概率的值域是[0-1],那如何让P(y=1|x)=wx呢?一起来推导下:

  1. expwx)的值域是[0,+无穷)
  2. p(y=0|x) = 1 - p(y=1|x)
  3. p(y=1|x) / 1 - p(y=1|x))的值域是[0,+无穷)
  4. p(y=1|x) / 1 - p(y=1|x))= expwx
  5. p(y=1|x) = 1/(exp(-wx) +1)

以上,我们通过压缩变换值域把他强制变到一个0-1的概率值

在实际应用中,是客观存在这种非线性变换函数的,这里LR用Sigmoid函数:

可以发现,和我们上面的想法推导几乎一致,但是这个函数不是我们推导出来的,而是客观存在的函数:

那么这里我们求w这个最优参数值呢?

在NB朴素贝叶斯中求取概率值,我们运用最大似然估计参数从而求得概率值。

那么在这里我们同样对P运用最大似然:

  1. PY|X)=P^y * P^(1-y)

这么表示并无实际含义,只是当y=0或1时的概率,那我们对它使用极大似然估计参数w:

  1. MLE w = arg max log(P(Y|X))
  2. = arg max Π P(yi|xi)
  3. = arg max log P(yi|xi)
  4. = arg max ∑(yi LogP(y=1|X) +(1-yi) LogP(y=0|X))
  5. p(y=1|x) = 1/(exp(-wx) +1)
  6. p(y=0|x) = 1 - p(y=1|x)

所以有:

  1. L(w)=-∑(yi log(𝜂(wx)) +(1-yi) (1-log(𝜂(wx))))

为什么前面有个减号呢?最大似然函数是求取参数的极大值,是上凸函数,前面加个符号,图像就变成了下凸函数,这样我们就可以求取到参数极小值。

看到上面的式子,如果你熟悉信息熵的话,是可以直接得到上面的式子的,即

  1. MLEmax = lossfunction min (- min CrossEntropy

信息熵公式:

  1. Hx)= - Pxilogpxi))

后面我们会有地方介绍信息熵,我们得到上面的L(w)负对数似然公式,由于它是高阶连续可导下凸函数,此时就可以将他作为损失函数来求解:

利用梯度下降法更新参数w,求导得:

  1. Lw)= -∑(yi- 𝜂(wx))xi

机器学习的损失函数是人为设计的,用于评判模型好坏(对未知的预测能力)的一个标准,就像去评判任何一件事物一样,从不同角度看往往存在不同的评判标准,不同的标准往往各有优劣,并不冲突。唯一需要注意的就是最好选一个容易测量的标准,不然就难以评判了。

其次,既然不同标准并不冲突,那使用最小二乘作为逻辑回归的损失函数当然是可以,那这里为什么不用最小二乘而用最大似然呢?请看一下最小二乘作为损失函数的函数曲线

  1. J(θ)=∑(yi- 𝜂(θx))

以及最大似然作为损失函数的函数曲线

  1. L(w)=-∑(yi log(𝜂(wx)) +(1-yi) (1-log(𝜂(wx))))

很显然,图2比图1展现的函数要简单多,很容易求到参数的最优解(凸函数),而图1很容易陷入局部最优解(非凸函数)。这就是前面说的选取的标准要容易测量,这就是逻辑回归损失函数为什么使用最大似然而不用最小二乘的原因了。

此时,我们就可以和前面一样通过lossfunc求取最优参数w,通过不断降低差距来使预测值接近真实值(即反向传递的误差):

由于L(w)是高阶连续可导的凸函数,根据凸优化理论,可利用梯度下降法、 牛顿法等求解,求导得到梯度:

  1. Lw)= -∑(yi- 𝜂(wx))xi

梯度:大小为导数的值,方向指向误差上升最快的方向

当参数w维度大于1时,用相同的方法对各个维度求e偏导数(e(w)’),偏导数所组成的向量就是梯度。

导数和梯度的区别是:导数是变化率,而梯度是一个和参数维度一样的向量。

各个维度的数值等于对应的偏导数,那么让参数向梯度相反的方向更新,从而减小误差值。所以,使用梯度下降法更新最小化F(W),从而更新参数W:

  • 设置初始化w,计算F(w)=sigmoid(wx ) ->预估值
    我们的数据前面说过都是有label值的,也就是真实值,得到预测值和真实值之间的误差,我们希望通过学习数据让误差越来越小。

  • 计算梯度

    1. Fw)=▽Lw)= -∑(yi- 𝜂(wx))xi

    此时我们已经得到了y真实值,w初始化值,x样本特征值,可以发现,梯度式子里面就是一个误差公式,那我们通过计算就可以直接代入乘以样本向量,得到梯度。
    下降方向

    1. dir = -▽Fw

    负号:前面说过,反方向是下降最快方向

  • 尝试梯度更新

    1. 𝑤𝑛𝑒𝑤 = 𝑤 +步长∗ 𝑑𝑖𝑟 得到下降后的 𝑤𝑛𝑒𝑤和F(w𝑛𝑒𝑤)
  • 如果 F(w𝑛𝑒𝑤)- F(w)较小,停止; 否则 ;跳到第2步

上传的附件
最近文章
eject