机器学习模型的选择
2016-01-15 16:08
190 查看
首先明白一个事实,那就是如果我们在某个训练集上训练拟合得到一个模型,那么显然,这个模型在这个训练集上的训练错误很有可能会比实际上的泛化错误(generalization error)会低(模型overfitting)。
那该 怎么办 呢?
其次,在训练集上训练得到 几个模型;
接着,把这些模型放在验证集上 进行验证,选择验证错误最小的那个模型;
最后,把这个模型放在测试集上 进行测试,计算得到它的测试错误,这个测试错误 就可以当成它的 泛化错误(generalization error)。
问题来了:
假如我们把数据集分成 训练集 和 测试集。然后,在训练集上训练得到几个模型,我们想从中选择一个我们认为最好的模型。我们该如何做选择呢?一种方法是,直接从中选择 训练错误最小的那个模型。
但是,我们知道,训练错误最小,很可能是这个模型过度拟合;因此,这个模型的 实际 泛化错误(generalization error)很大。换句话说,如果把这些模型放在测试集上进行测试,训练错误最小的那个模型很可能测试错误很大。所以,这种方法不可行。另一种方法是,把 这些模型 放在测试集上进行测试,然后选择 测试错误最小的那个。
嗯,是不错,但是如果我们想知道这个模型的 泛化错误(generalization error)是多少该怎么办? 直接使用测试错误吗?显然这样做不好,前面提到,这个错误值往往 很可能 比实际的泛化错误 小。那该 怎么办 呢?
具体做法是:
首先,把数据集分成三部分:训练集、验证集(交叉验证集 cross validation set)、测试集;其次,在训练集上训练得到 几个模型;
接着,把这些模型放在验证集上 进行验证,选择验证错误最小的那个模型;
最后,把这个模型放在测试集上 进行测试,计算得到它的测试错误,这个测试错误 就可以当成它的 泛化错误(generalization error)。
相关文章推荐
- Codeforces Round #338 (Div.2)
- JBoss 安装与环境变量配置
- Openstack中数据库Galera/mysql 集群备忘笔记
- HP pavilion安装Ubuntu14.04后,无线不能使用解决方案
- Go 定时器和断续器
- 使用Python和shell脚本打包ipa
- Spark学习之数据读取与保存(4)
- 40 个很有用的 Mac OS X Shell 脚本和终端命令
- Spark学习之数据读取与保存(4)
- Codeforce 题目614AA. Link/Cut Tree(水题,坑精度啊)
- shell中使用php命令
- 如何避免父UIView触摸事件影响到子UIView
- 模仿百度空格间隔搜索,匹配选择项目
- android JNI使用AAssetManager读取asset目录内容
- 详解C++中const_cast与reinterpret_cast运算符的用法
- freemarker获取后台session中保存的值
- Spark学习之键值对(pair RDD)操作(3)
- Spark学习之键值对(pair RDD)操作(3)
- Android消息推送完美方案
- 机房重构——DataGridView绑定问题