如何选择一个合适的机器学习算法模型?

当我们的算法不太符合自己的预期时,我们都有哪些改进手段?


  • 去搜索更多的数据,增加训练集的数量
  • 增加特征的数量,更高程度地利用已有的数据
  • 尝试多项式特征
  • 减少特征的数量,减轻过拟合的问题
  • 增大或者减小λ

方法有很多,但是我们不能所有都用,而是要针对给出的问题选择性的做其中的一个或者几个

有时,我们的算法在训练集上有很好的表现,在实际使用时上却表现平平,这便很有可能是过拟合了

为了改善这种情况,我们将一个数据集,分为两部分

训练集(training set)和测试集(test set)

我们在训练集中训练我们的机器学习算法,然后用测试集来衡量这个算法在实际应用中的表现

通常,训练集和测试集分别占数据集的70%和30%

通常我们会:

  • 在训练集中训练Θ,使其将Jtrain(Θ)最小化
  • 根据Θ计算Jtest(Θ)

测试集中误差的公式如下

  • 线性回归中:与线性回归的代价函数差不多
    在这里插入图片描述

  • 逻辑回归中,我们根据错误的个数的总量除以数据总量来衡量

在这里插入图片描述
在这里插入图片描述

但是,慢慢的,问题来了

在选择算法时,我们一般用 d 来表示多项式的阶数 ,比如一个线性回归的问题,我可以选择用二次函数去拟合,也可以用三次函数去拟合,我们把这个阶数称为d

在这里做一点补充,一条数据,可以有很多个特征,可以是一次的,也可以是高次的,比如x1,x2这*种一次项,和x1x2,x12这种二次项等等,一般来说,特征的个数决定了线性空间,而最高次的次数决定了你这个超平面在线性空间种的形状

多项式的阶数高了,能够更好的拟合训练集

但是容易过拟合

多项式的阶数低了,则对数据的拟合就不是很理想

我们如何破局?

方法就是:

从低阶到高阶全都试一遍,然后依次带入测试集中,选出在测试集中使test error最小的 d

这样子,我们就找到了最合适的 d ,是不是感觉挺合理了?

但是但是,问题又来了

这个选出来的“最优”的 d ,也许只是针对这个test set是比较好的,所以我们选出的可能只是针对这个test error的最优解,而不一定具有普遍性,换句话说,可能泛化能力不够强

所以,我们引出接下来的概念

我们将数据集分为三部分:

1.训练集Training set 2.交叉验证集Cross validation set 3.测试集Test set

这三个集占数据集的比重比较经典的为

60%,20%,20%

我们的大致流程如下:

  • 在Training set 中训练大小不同的d对应的最优的Θ
  • 将各个Θ带入交叉验证集(Cross validation set)中,找到使test error 最小的解
  • 将这个theta带入test set中,得到一个更加客观的性能判断

这样我们就能得到一个比较合适的 d ,从而得到一个比较合适的模型

我们是否能够得到他们之间的一些可视化的关系??

接下来,我们来讨论一下test error , training error与 多项式阶数d,数据集大小N,正规化参数λ三者的关系

在这里插入图片描述

多项式阶数 d

根据上文我们了解到,多项式的阶数 d 不能太大也不能太小,现在,我们就用更直观的方法去感受一下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值