Ng-机器学习(Day6)

一、 改进算法

1. 当代价函数非常大的时候可以尝试的办法:

  • 获取更多的训练样本
  • 尝试用更少的特征数
  • 增加额外的特征
  • 降低/提高lambda值
    但是!这些步骤会花费较多的时间。下面将介绍一种事半功倍的解决办法。
    在这里插入图片描述

2.机器学习诊断

它能够告诉你在计算的过程当中哪些方面出现了错误,然后可以知道如何改进才能达到最好的效果。
在这里插入图片描述

(1)如何防止过拟合/欠拟合

  • 将数据分为测试集和训练集(3:7的比例)。

  • 首先用训练集获取最优θ,然后用到test来计算代价函数的值
    在这里插入图片描述

  • 对于分类问题,可以用错误分类度量方法

  • 将判断错误记为1,判断正确记为0,然后计算出现的误差之和。
    在这里插入图片描述

(2)如何选择模型

选择几项式?

  1. 首先将数据分为三个部分:
    (1). 训练集(60%)
    (2). 交叉验证集(20%)
    (3). 测试集(20%)
    在这里插入图片描述
  2. 然后使用不同模型计算交叉验证集的误差值,选择出交叉验证集误差值最小的那个模型,然后再利用测试集去估算泛化的误差。

在这里插入图片描述

(3)有关偏差和方差的问题

从下图可以明显的看出:

  • 当出现高偏差时:训练集上的误差会比较高,交叉验证集上的误差同样也会很高。
  • 当出现高方差时:训练集上的误差会比较低,交叉验证集上的误差会比较高。
    在这里插入图片描述

4、正则化

  1. 如果λ的值过大,那么会出现高偏差,使得除了θ_0以外的θ都非常的接近于0。
  2. 如果λ的值过小,那么就会使得λ起不到效果。
    在这里插入图片描述

选则正确λ的步骤:

  1. 依此带入不同的λ计算正则化的代价函数的最优θ。
  2. 然后依此用这些θ来计算交叉集上我误差
  3. 选择一个使得交叉集上代价函数最小的θ,放到测试集上去看代价函数的值
    在这里插入图片描述

(5)学习曲线

  • 在训练集上,如果训练的样本不断的增加,那么训练集的误差就会越来越大
  • 在交叉集上,如果交叉集的样本增加,那么其泛化效果就会越来越好,误差就会出现的下降。
    在这里插入图片描述

高偏差:

  • 交叉验证集的误差会不断的下降,并且到一个点就保持平稳
  • 训练集的误差不断上升,并且越来越接近交叉验证集
    注:如果算法出现高偏差,那么使用更多数据样本不会有效果
    在这里插入图片描述

出现高方差时,我们的训练集一开始能够很好的进行拟合,但是随着样本量逐渐增大,训练集的误差必然会有所上升,但是上升的幅度不会这么的大。
交叉验证集一开始会有较高的误差,但是随着样本量的增加,误差就会逐渐变小,但是不会变化的非常快速。
注:如果样本量足够大,那么训练集误差和交叉验证集的误差就会越来越接近。因此,当算法出现高方差时,那么通过增加样本量可以起到比较好的作用。

在这里插入图片描述

解决方法:
高偏差(欠拟合):

  • 降低λ
  • 增加特征数
  • 增加高次项

高方差(过拟合):

  • 提高λ
  • 减少特征数
  • 增加样本量
    在这里插入图片描述

在使用神经网络的时候,当网络比较大时更容易出现过拟合的情况。此时可以通过提高λ的方式来预防。
此外,在确定隐藏层的数量时,可以通过使用交叉集来验证1层、2层、3层…的代价函数值,然后选择代价函数值最小的那一层即可。
在这里插入图片描述

3.误差分析思想

当在做一个机器学习项目的时候,我们通常会采用以下的几个步骤:

  • 首先快速的使用自己已经掌握的算法将这个项目大概的框架先做出来,然后用交叉验证集去验证
  • 然后通过画学习曲线去决定下一步应该做什么事情。比如是高方差还是高偏差。
  • 同时,可以通过误差分析方法,去发现归类错误的目标中,有哪些共同的规律,然后根据这个规律来进一步优化。

在这里插入图片描述

4.偏斜类

  • 假设我们通过算法计算出来的误差值只有1%,但是真实情况下,只有0.5%的病人得了病,所以这个时候,1%的误差就显得不是很小了。因为如果我们默认所有人都没有得病,那么我们的误差也只有0.5%。
  • 在分类问题当中,当一个类别的数量非常大,另一个类别的数量非常小的时候,这个时候我们就称之为偏斜类。

在这里插入图片描述

  • Precision:
    用真实为I类的数量/我们预测到的为类的数量。这个值越大,说明预测的越准确。

  • Recall:
    真实为I类的数量/真实为I类的数量+真实为I类但被预测为II类的数量。召回率越高越好。

在这里插入图片描述

  • 高准确率,低召回率:
    如果我把判断为I类的门槛设的很高,那么我就可以比较有自信的去告诉被判断为I类的人我的预测是非常准确的。但是,由于我们门槛很高,导致我有可能将很多属于I类的但是未达到该门槛的人误判为II类。
  • 高召回率,低准确率:
    如果我把判断为I类的门槛设的很低,那么这个时候我的自信就比较低了,但是我可以很有自信的说,真实是I类的人在我的判断中一定是属于I类的,但是这个时候会出现很多的假阳性。

在这里插入图片描述

  • 通过计算F score可以比较不同算法,得到一个权衡P和R的最优算法。

在这里插入图片描述

  • 当我们的数据集当中特征数量太少,可能会导致我们无法准确的预测。比如,我们找一个房产经济人,将房子的大小和房间数给他,他可能不能够准确的预测出房价。因为影响房价的重要因素还有很多。

  • 当我们有很多的参数时,这个时候我们的算法一般是低偏差的。
    所以我们如果想要得到一个比较高性能的模型,我们首先可以有很多的参数,其次数据样本量比较庞大,从而使得偏差值和方差都比较的低。
    在这里插入图片描述

二、 SVM

1.优化目标

在SVM当中,cost代替了log项,图像和log项的图像非常相似。
在这里插入图片描述

在SVM中,我们优化不再使用λ,而是使用C,C这一项是被放到了前面的一项当中,并且1/m被去除。
在这里插入图片描述
在这里插入图片描述

在支持向量机当中,为了使我们的代价函数最小:

  • 当y=1时,那么我们希望z(θ转置*x)能够尽可能的大于等于1,因为当z大于等于1时我们的cost_1函数就会是0,这就可以使代价函数最小

  • 当y=0时,我们则希望z小于等于-1,从而使得我们的代价函数最小。

在这里插入图片描述

  • SVM会选择黑色的线作为决策边界, 然后会以最大的间距将正样本与负样本分开。所以有时候SVM也被叫做大间距分离器。
    在这里插入图片描述

  • 在支持向量机当中,如果C被设定的过大,那么我们的向量机就会对异常点非常的敏感。从而会得到红色的那条玫红色的那条线。

  • 若C比较小,那么我们的SVM还是会继续使用黑色的那条线。
    在这里插入图片描述

2.大间隔器原理

1、向量内积机制

下图中的上面的座标轴:

  • 向量u的长度就等于根号u_12+u_22(勾股定理)。而向量v的长度也可以同理得到。通过箭头v做垂直于u的直线,p就是v在u上的映射。那么u.T * v=p*u。
  • 当p<90°时呢,我们的p是为正数的。
  • 当p>90°时呢,我们的p此时就是负数。
    在这里插入图片描述

2、支持向量机选择决策边界的原理

  • 假设左图的绿色线为决策边界(支持向量机不会选择这条线)。利用向量内积的原理,我们可以绘制出两个样本在θ上的映射,可以看到此时p(1)是一个很小的数,p(2)为负数。那么如果要满足p(i)* ||θ||>=1或p(i)*||θ||,那么我们就要尽可能的使||θ||大。那么如果||θ||大了,那就和优化项的1/2 * ||θ2||要尽量小就冲突了。所以支持向量机不会选择这头条决策边界。
    在这里插入图片描述

  • 若选择这条绿色决策边界,我们的P就会变大,从而使得我们的θ变小,而为了使θ尽量的小,我们的SVM会找到一个间距,这个间距会使得P尽可能的大,最终目的还是为了使得θ可以尽可能的小。
    在这里插入图片描述

3、核函数

当我们需要对高阶项进行计算时,会耗费相当大的计算量,因此这里我们使用核函数来近似。
x与的相似核函数表示如下:

  • 当x和l非常近似的时候,那么f就会很接近与1
  • 当x和l离的比较远的时候,那么这个时候f就会很接近与0

在这里插入图片描述

  • 假设我们现在有三个变量,f1,f2,f3对应的相似值landmarks分别为l(1),l(2),l(3)。参数θ1,θ2,θ3已知,当我们的真实样本为玫红色时,可见真实样本与l(1)离的非常近,与l(2),l(3)离的非常的远。因此,这是f1会非常的接近于1,而f2、f3会非常的接近于0,所以此时我们带入可求得我们的值是0.5>=0.5,所以预测值会为1。
  • 同样的道理,当我们的实际值离这三个点都非常远的时候,我们的预测值就变成了θ0。
  • 又因为我们的θ3是0,所以仅当实际值在红色线区域内我们的预测值才会为1(这样就可以得出我们的决策边界)
    在这里插入图片描述

如何选择landmark:
看下图中位于下半部分的两幅图。左边的一幅图是我们的给出的样本所在的位置,我们在每个样本点对应的位置放上一个landmark,然后组成一个向量。
在这里插入图片描述

  • 比如所我们取x(i),那么我们就会得到f(i)_1、f(i)_2、…、f(i)_m。每一个f(i)_j,都表示不同样本点与x(i)的距离。所以当到f(i)_i的时候也就是在计算x(i)与自身的相似值,也就1。

在这里插入图片描述

  • 然后将这些f(i)进行组合,我就创建了一个新的向量来描述我们的特征向量x(i)

在这里插入图片描述

  • 然后利用核函数计算SVM
    在这里插入图片描述
  • 当C大时,那么此时就很有可能会出现高方差(过拟合)
  • 当C小时,此时很有可能会出现高偏差(欠拟合)
  • 当sigmoid大时,那么会出现高偏差
  • 当sigmoid小时,那么会出现高方差

在这里插入图片描述

4、应用SVM

  • 在拟合最优θ时可以调用别人的库
  • 选择C
  • 选择核函数(线性核函数就是没有使用核函数)
  • 如果使用高斯核函数就要选择sigmoid值

在这里插入图片描述

  • n相对于m来说很大的时候,使用Logistic回归或者线性SVM
  • n小,m适中时使用带有高斯核函数的SVM
  • n小,m很大的时候加入或创造更多特征,然后用Logistic回归或者线性SVM
  • 神经网络在这些条件下都很好,但是训练的比较慢。

在这里插入图片描述

参考资料:

  1. Ng机器学习
  2. 黄博笔记
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章