机器学习算法基础-开发流程、学习策略、算法求解、性能指标

1、基本概念

损失函数 用来评估模型好坏程度,即预测值f(x)与真实值的不一致程度,通常表示为L(Y, f(x))的一个非负的浮点数。比如你要做一个线性回归,你拟合出来的曲线不会和原始的数据分布是完全吻合(完全吻合的话,很可能会出现过拟合的情况),这个差距就是用损失函数来衡量。那么损失函数的值越小,模型的鲁棒性也就越好,对新数据的预测能力也就越强。
损失函数 定义在单个样本上的,算的是一个样本的误差。
代价函数 定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。
正则化 在现有特征不变情况下,降低部分不重要特征的影响力。这个方法有助于有很多特征且每个特征都有贡献的算法避免过拟合。
目标函数 最终需要优化的函数。等于经验风险+结构风险(也就是Cost Function + 正则化项)。

2、开发流程

在这里插入图片描述

3、学习策略:损失函数、代价函数、目标函数、正则化

3.1 损失函数

3.1.1、0-1损失函数(0-1 Loss Function)主要用于感知机
在这里插入图片描述
当预测错误时,损失函数结果为1;当预测正确时,损失函数为0。该预测并不考虑具体的误差程度,直接进行二值化。
优点:稳定的分类面,不连续,所以不可导,但是次梯度可导
缺点:二阶不可导,有时候不存在唯一解

3.1.2、平方损失函数(Quadratic Loss Function)主要用于最小二乘法(OLS)
在这里插入图片描述
预测值与实际值的差的平方。
优点:容易优化(一阶导数连续)
缺点:对outlier点敏感,得不到最优的分类面

3.1.3、绝对值损失函数(Absolute Loss Function)
在这里插入图片描述
与平方损失函数类似,去实际值与测试值的差值的绝对值,但是不会被放大。

3.1.4、对数损失函数(Logarithmic Loss Function)主要用于Logistic回归与Softmax分类
在这里插入图片描述
对数损失函数用到了极大似然估计的思想。P(Y|X)表示在当前模型上,样本X的预测值为Y的概率,也就是说对于样本X预测正确的概率。由于统计极大似然估计用到概率乘法,为了将其转为假发,对其取对数即可方便展开为加法;由于是损失函数,预测正确的概率应该与损失值成反比,这里对概率取反得到-log(p(y|x))。
优点:稳定的分类面,严格凸,且二阶导数连续。

3.1.5、指数损失函数(Exponential Loss Function)主要用于Adaboost集成学习算法
在这里插入图片描述
学过Adaboost的知道它是前向分步加法算法的特例,是一个加和模型,损失函数就是指数函数。

3.1.6、铰链损失函数(Hinge Loss Function)主要用于支持向量机(SVM)
在这里插入图片描述
其中y=\pm 1,f(x)=wx+b
Hinge Loss function 一般在分类算法使用的分类函数,尤其使用于SVM。
优点:稳定的分类面,凸函数。可以极大化分类间隔。

3.2 代价函数

3.2.1、均方误差(Mean Square Error)
在这里插入图片描述
均方误差是指参数估计值与参数真值之差平方的期望值,MSE用来评估模型的好坏程度,MSE越小说明预测模型精确度越高。
通常用来做回归问题的代价函数。

3.2.2、均方根误差(Root Mean Square Error)
在这里插入图片描述
均方根误差是均方的算术平方根,能够直观的观察预测值与真实值直接的差距。
通常用来作为回归算法的性能指标。

3.2.3、平均绝对误差(Mean Absolute Error)
在这里插入图片描述
平均误差是绝对误差的平均值,平均绝对误差能更好的反应预测值与实际值的实际误差情况。
通常用来作为回归算法的性能指标。

3.2.4、交叉熵代价函数(Cross Entry)
在这里插入图片描述
其中p(x)是真实分布的概率,q(x)是模型通过数据计算出来的概率估计。
交叉熵是用来评估当前训练得到的概率分布于真实分布的差异情况,减少交叉熵损失就是在提高模型的预测的准确率。
通常用来作为分类问题的代价函数。

3.3 正则化

3.3.1、L1正则化
L1正则化假设模型的先验概率分布服从拉普拉斯分布;
在这里插入图片描述
–求解略复杂;
–能够得到稀疏解

3.3.2、L2正则化
L2正则化假设模型的先验概率分布服从高斯分布;
在这里插入图片描述
–简单有效
–便于求解
– 最常用

3.4 如何选择好的损失函数

在这里插入图片描述
还是需要考虑你的具体要解决的问题及样本情况。可以简单遵循几个准则:
L梯度需要有界,鲁棒性要有保障
将L1作为L的渐近线,稳定的分类边界
大分类间隔,保证泛化能力
选择正确的正则化方法(一般选择L2)

4、算法求解:梯度下降法、牛顿法、拟牛顿法等

4.1、梯度下降法

** 梯度下降法(Gradient Descent)**
梯度下降法是最早最简单,也是最为常用的最优化方法。梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢。梯度下降法的搜索迭代示意图如下图所示:
在这里插入图片描述
梯度下降法的缺点:
  (1)靠近极小值时收敛速度减慢,如下图所示;
  (2)直线搜索时可能会产生一些问题;
  (3)可能会“之字形”地下降。
在这里插入图片描述
从上图可以看出,梯度下降法在接近最优解的区域收敛速度明显变慢,利用梯度下降法求解需要很多次的迭代。

在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

比如对一个线性回归(Linear Logistics)模型,假设下面的h(x)是要拟合的函数,J(theta)为损失函数,theta是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(theta)就出来了。其中m是训练集的样本个数,n是特征的个数。
在这里插入图片描述
在这里插入图片描述

批量梯度下降法(Batch Gradient Descent,BGD)
(1)将J(theta)对theta求偏导,得到每个theta对应的的梯度:
在这里插入图片描述
(2)由于是要最小化风险函数,所以按每个参数theta的梯度负方向,来更新每个theta:
在这里插入图片描述
(3)从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果m很大,那么可想而知这种方法的迭代速度会相当的慢。所以,这就引入了另外一种方法——随机梯度下降。

对于批量梯度下降法,样本个数m,x为n维向量,一次迭代需要把m个样本全部带入计算,迭代一次计算量为m*n2。

随机梯度下降(Stochastic Gradient Descent,SGD)
1)上面的损失函数可以写成如下这种形式,损失函数对应的是训练集中每个样本的粒度,而上面批量梯度下降对应的是所有的训练样本:
在这里插入图片描述
(2)每个样本的损失函数,对theta求偏导得到对应梯度,来更新theta:
在这里插入图片描述
(3)随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

随机梯度下降每次迭代只使用一个样本,迭代一次计算量为n2,当样本个数m很大的时候,随机梯度下降迭代一次的速度要远高于批量梯度下降方法。两者的关系可以这样理解:随机梯度下降方法以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。

对批量梯度下降法和随机梯度下降法的总结:

批量梯度下降—最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。

随机梯度下降—最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。

4.2、牛顿法(Newton’s method)

牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f (x)的泰勒级数的前面几项来寻找方程f (x) = 0的根。牛顿法最大的特点就在于它的收敛速度很快。
具体步骤:
  首先,选择一个接近函数 f (x)零点的 x0,计算相应的 f (x0) 和切线斜率f ’ (x0)(这里f ’ 表示函数 f 的导数)。然后我们计算穿过点(x0, f (x0)) 并且斜率为f '(x0)的直线和 x 轴的交点的x坐标,也就是求如下方程的解:
在这里插入图片描述
  我们将新求得的点的 x 坐标命名为x1,通常x1会比x0更接近方程f (x) = 0的解。因此我们现在可以利用x1开始下一轮迭代。迭代公式可化简为如下所示:
在这里插入图片描述
  已经证明,如果f ’ 是连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值x0位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果f ’ (x)不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。下图为一个牛顿法执行过程的例子。

由于牛顿法是基于当前位置的切线来确定下一次的位置,所以牛顿法又被很形象地称为是"切线法"。牛顿法的搜索路径(二维情况)如下图所示:

牛顿法搜索动态示例图:
在这里插入图片描述

关于牛顿法和梯度下降法的效率对比:
  从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)
  根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
  在这里插入图片描述

注:红色的牛顿法的迭代路径,绿色的是梯度下降法的迭代路径。
牛顿法的优缺点总结:

优点:二阶收敛,收敛速度快;

缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。

4.3、拟牛顿法(Quasi-Newton Methods)

拟牛顿法是求解非线性优化问题最有效的方法之一,于20世纪50年代由美国Argonne国家实验室的物理学家W.C.Davidon所提出来。Davidon设计的这种算法在当时看来是非线性优化领域最具创造性的发明之一。不久R. Fletcher和M. J. D. Powell证实了这种新的算法远比其他方法快速和可靠,使得非线性优化这门学科在一夜之间突飞猛进。

拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。

具体步骤:

拟牛顿法的基本思想如下。首先构造目标函数在当前迭代xk的二次模型:
在这里插入图片描述
这里Bk是一个对称正定矩阵,于是我们取这个二次模型的最优解作为搜索方向,并且得到新的迭代点:
在这里插入图片描述
其中我们要求步长ak 满足Wolfe条件。这样的迭代与牛顿法类似,区别就在于用近似的Hesse矩阵Bk 代替真实的Hesse矩阵。所以拟牛顿法最关键的地方就是每一步迭代中矩阵Bk 的更新。现在假设得到一个新的迭代xk+1,并得到一个新的二次模型:
在这里插入图片描述
我们尽可能地利用上一步的信息来选取Bk。具体地,我们要求
在这里插入图片描述
从而得到
在这里插入图片描述
这个公式被称为割线方程。常用的拟牛顿法有DFP算法和BFGS算法。

4.4、共轭梯度法(Conjugate Gradient)

共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。
具体的实现步骤请参考wiki百科共轭梯度法
下图为共轭梯度法和梯度下降法搜索最优解的路径对比示意图:
在这里插入图片描述
注:绿色为梯度下降法,红色代表共轭梯度法

5、性能评价指标

5.1 分类指标

True Positive(真正, TP):将正类预测为正类数.
True Negative(真负 , TN):将负类预测为负类数.
False Positive(假正, FP):将负类预测为正类数 → 误报 (Type I error).
False Negative(假负 , FN):将正类预测为负类数 → 漏报(Type II error)
关系如下表所示:

预测值=1预测值=0
真实值=1TPFN
真实值=0FPTN

这里是引用

5.1.1 准确率 Accuracy, ACC

ACC(Accuracy)= (TP+TN+FP+FN) / (TP+TN)

在正负样本不平衡的情况下,准确率这个评价指标有很大的缺陷。比如在互联网广告里面,点击的数量是很少的,一般只有千分之几,如果用acc,即使全部预测成负类(不点击)acc也有 99% 以上,没有意义

5.1.2 精确率 或 查准率 Precision, P

P= (TP+FP) / TP

精确率,又称查准率(Precision):指的是模型判为正的所有样本中有多少是真正的正样本。

5.1.3 召回率 或 查全率 Recall, R

R = (TP+FN) / TP

召回率,召回率(Recall)又称查全率:指的是所有正样本有多少被模型判为正样本,即召回;分类正确的正样本个数占正样本个数的比例

5.1.4 F1 测量值

2/F1 = 1/P + 1/R
F1 = 2TP / (2TP+FP+FN)

F1 是精确率和召回率的调和均值

5.1.5 AUC
AUC 是 ROC (Receiver Operating Characteristic) 曲线以下的面积, 介于0.1和1之间。AUC作为数值可以直观的评价分类器的好坏,值越大越好。常用来评价一个二值分类器的优劣。
true positive rate:TPR= (TP+FN) / TP
false positive rate:FPN= (FP+TN) / FP
​ROC 曲线如图(a)所示,横坐标是false positive rate, FPN, 纵坐标是true positive rate, TPR
在这里插入图片描述
横轴FPR:FPR越大,预测正类中实际负类越多。
纵轴TPR:Sensitivity(正类覆盖率), TPR越大,预测正类中实际正类越多。
理想目标:TPR=1,FPR=0, 即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好。
首先AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
简单说:AUC值越大的分类器,正确率越高2 :

AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
0.5<AUC<1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
AUC=0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
AUC<0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测,因此不存在 AUC<0.5 的情况。

ROC和AUC的优点:既然已经这么多标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化。

5.2 回归指标

5.2.1 平均绝对误差
平均绝对误差MAEMAEMAE (Mean Absolute Error) 又被称为 L1 范数损失(L1−norm loss):
在这里插入图片描述

5.2.2 平均平方误差
平均平方误差 MSE (Mean Squared Error) 又被称为 L2 范数损失(L2−norm loss):
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值