机器学习

梯度下降

https://blog.csdn.net/qq_41800366/article/details/86583789
在这里插入图片描述
J是关于Θ的一个函数,我们当前所处的位置为Θ0点,要从这个点走到J的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是α,走完这个段步长,就到达了Θ1这个点!

α:学习率,不要走太快,错过了最低点

梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号。

为什么采用梯度下降?
反向传播(用于优化神网参数):根据损失函数计算的误差通过反向传播的方式,指导深度网络参数的更新优化。

采取反向传播的原因:首先,深层网络由许多线性层和非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数(非线性来自于非线性激活函数),因此整个深度网络可以视为是一个复合的非线性多元函数。

我们最终的目的是希望这个非线性函数很好的完成输入到输出之间的映射,也就是找到让损失函数取得极小值。所以最终的问题就变成了一个寻找函数最小值的问题,

梯度消失和梯度爆炸
梯度消失和梯度爆炸本质上是一样的,都是因为网络层数太深而引发的梯度反向传播中的连乘效应。

Sigmod导数图像
在这里插入图片描述
Sigmoid导数的取值范围在0~0.25之间,而我们初始化的网络权值通常都小于1,因此,当层数增多时,小于0的值不断相乘,最后就导致梯度消失的情况出现。

同理,梯度爆炸的问题也就很明显了,就是当权值过大时,导致 |导数 * w | > 1,最后大于1的值不断相乘,就会产生梯度爆炸。


k-means

K-Means(聚类)
分类:有标签,根据数据已知的特点
聚类:聚类的目的也是把数据分类,但是事先我是不知道如何去分的,完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。在聚类的结论出来之前,我完全不知道每一类有什么特点,一定要根据聚类的结果通过人的经验来分析,看看聚成的这一类大概有什么特点。

K-Means聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。

  1. 首先输入k的值,即我们希望将数据集经过聚类得到k个分组。
  2. 从数据集中随机选择k个数据点作为初始大哥(质心,Centroid)
  3. 对集合中每一个小弟,计算与每一个大哥的距离(距离的含义后面会讲),离哪个大哥距离近,就跟定哪个大哥。
  4. 这时每一个大哥手下都聚集了一票小弟,这时候召开人民代表大会,每一群选出新的大哥(其实是通过算法选出新的质心)。选新大哥,这里要注意选大哥的方法是每个人X坐标的平均值和Y坐标的平均值组成的新的点,为新大哥,也就是说这个大哥是“虚拟的”
  5. 如果新大哥和老大哥之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。
  6. 如果新大哥和老大哥距离变化很大,需要迭代3~5步骤。

优化:

  • 初始聚类中心点选取尽量分散

1 × 1卷积核

作用:降维、升维、跨通道交互、增加非线性


模型

SVM

https://zhuanlan.zhihu.com/p/31886934

支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机
在这里插入图片描述
原理:求解能够正确划分训练数据集并且几何间隔最大的分离超平面


Bagging & Boosting

Bootstraping
助法(Bootstraping)是一种模型验证(评估)的方法。其以自助采样法(Bootstrap Sampling)为基础,即有放回的采样或重复采样。

具体做法是:在含有 m 个样本的数据集中,每次随机挑选一个样本, 将其作为训练样本,再将此样本放回到数据集中,这样有放回地抽样 m 次,生成一个与原数据集大小相同的数据集,这个新数据集就是训练集=。这样有些样本可能在训练集中出现多次,有些则可能从未出现。原数据集中大概有 36.8% 的样本不会出现在新数据集中。因此,我们把这些未出现在新数据集中的样本作为验证集。把前面的步骤重复进行多次,这样就可以训练出多个模型并得到它们的验证误差,然后取平均值,作为该模型的验证误差。

Baggging 和Boosting都是模型融合的方法,可以将弱分类器融合之后形成一个强分类器,而且融合之后的效果会比最好的弱分类器更好。
Bagging和Boosting的区别(面试准备)
Bagging:
并行化聚合方法

  1. 从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)

  2. 每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

  3. 对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;
    对回归问题:计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

Boosting:
顺序化聚合方法

AdaBoosting方式每次使用的是全部的样本,每轮训练改变样本的权重。下一轮训练的目标是找到一个函数f 来拟合上一轮的残差。当残差足够小或者达到设置的最大迭代次数则停止。Boosting会减小在上一轮训练正确的样本的权重,增大错误样本的权重。(对的残差小,错的残差大)

Bagging和Boosting的区别:
1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

5)bagging减少variance,boosting减少bias
Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均。由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance。在这里插入图片描述
bagging后的bias和子模型接近
另一方面,若各子模型独立,则有在这里插入图片描述
若各子模型完全相同,则在这里插入图片描述
bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。希望模型能够具有更好的鲁棒性,也就是稳定性,希望避免过拟合,显然这就是在减少variance。

boosting从优化角度来看,是用forward-stagewise这种贪心法去最小化损失函数。boosting是在sequential地最小化损失函数,其bias自然逐步下降。但由于是采取这种sequential、adaptive的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低variance。所以说boosting主要还是靠降低bias来提升预测精度。


随机森林


激活函数

https://blog.csdn.net/tyhj_sf/article/details/79932893
在这里插入图片描述
为什么需要激活函数?
如果没有激活函数,每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。
引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。


Sigmod

Sigmod
特点:
它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。完成二分类
缺点:

  1. 在中间斜率比较大的地方是神经元的敏感区,在两边斜率很平缓的地方是神经元的抑制区。当输入稍微远离了坐标原点,函数的梯度就变得很小了,几乎为零。由于sigmod导数处于 [0, 0.25],会导致梯度消失(初始权值小于1)和梯度爆炸(初始权值 * 导数 > 1)。
  2. sigmod输出 [0, 1],不是0均值。后一层的神经元将得到上一层输出的非0均值的信号作为输入。如x > 0 , f = w x + b, 那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 当然了,如果按batch去训练,那么那个batch可能得到不同的信号,
  3. 幂运算计算耗时

tanh

在这里插入图片描述
在这里插入图片描述
特点:
同sigmod,在输入很大或是很小的时候,输出都几乎平滑,梯度很小,不利于权重更新。

改进:
tanh的输出区间是在(-1,1)之间,而且整个函数是以0为中心的


ReLU

在这里插入图片描述
在这里插入图片描述
优点:

  1. 在[0, +∞] 激活函数导数为1,解决了梯度消失
  2. 线性计算,计算速度非常快
  3. 收敛速度远快于sigmoid和tanh

缺点:

  1. 输出不是0中心
  2. [ -∞, 0] 时候ReLU是未激活的, 反向传输更新参数是,有的参数会永远不被更新(负数输入)。Dead ReLU问题

ELU

在这里插入图片描述
在这里插入图片描述
优点:

  1. 不会有Dead ReLU 问题
  2. 输出均值接近0
    缺点:
    幂运算,运算量较高

Softmax

多分类
在这里插入图片描述
在这里插入图片描述
该元素的softmax值,就是该元素的指数与所有元素指数和的比值。该元素的softmax值,就是该元素的指数与所有元素指数和的比值。


性能评估指标

混淆矩阵(confusion matrix)

在这里插入图片描述
True Positive(真正,TP):将正类预测为正类数
True Negative(真负,TN):将负类预测为负类数
False Positive(假正,FP):将负类预测为正类数误报 (Type I error)
False Negative(假负,FN):将正类预测为负类数→漏报 (Type II error)

  1. 准确率(Accuracy)
    在这里插入图片描述
    被分对样本数 / 所有样本数
    Error rate = 1 - Accuracy

缺点:
在正负样本不平衡的情况下,准确率这个评价指标有很大的缺陷。

  1. 精确度(Precision)/ 查准率
    在这里插入图片描述
    被分为正例中 实际有多少正例的比例

  2. 召回率(Recall)/ 查全率
    在这里插入图片描述
    在所有正例中,有多少正例实际被分为正例
    查准率和查全率往往互相矛盾,无法兼顾,所有需要同时考虑二者 --> F1 score,PR曲线。

  3. F1 Score
    在这里插入图片描述
    包含了Precision和Recall的综合评价指标。越高越好


  1. ROC(Receiver Operating Characteristic)曲线
    在这里插入图片描述
    TP_rate = TP / P = P个正样本中被正确划分为正的数量 / 真实正样本个数
    FP_rate = FP / N = N个负样本中被错误划分为正的数量 / 真实负样本个数
  • 曲线与FP_rate轴围成的面积(记作AUC)越大,说明性能越好,即图上L2曲线对应的性能优于曲线L1对应的性能。即:曲线越靠近A点(左上方)性能越好,曲线越靠近B点(右下方)曲线性能越差。
  • 位于C-D线上的点说明算法性能和random猜测是一样的–如C、D、E点。位于C-D之上(即曲线位于白色的三角形内)说明算法性能优于随机猜测–如G点,位于C-D之下(即曲线位于灰色的三角形内)说明算法性能差于随机猜测–如F点。
  1. PR(Precision-Recall)曲线
    在这里插入图片描述
    平衡点(BEP)是P=R时的取值,如果这个值较大,则说明学习器的性能较好。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐