https://zhuanlan.zhihu.com/p/106927814
本篇你将了解过拟合和欠拟合的概念,并且能够使得你的模型更准确
(一)尝试不同的模型
既然你有一种可靠的方法来测量模型精度,那么你可以尝试使用其他模型,并查看哪种模型可以提供最佳预测。
可以在scikit-learn的文档中看到决策树模型有很多选项(比你想要的或需要的更多)。 最重要的选项决定了树的深度。 回想一下这个微课程的第一课,树的深度是衡量它在进行预测之前分裂的数量。 这是一棵相对较浅的树
在实践中,树在顶层(所有房屋)和叶子之间有10个分裂并不罕见。随着树木越来越深,数据集被切成了更少房屋的树叶。如果树只有1个分割,则将数据分为2组。如果每组再次拆分,我们将获得4组房屋。再次拆分每个将创建8个组。如果我们通过在每个级别添加更多分组来保持组的数量翻倍,那么当我们到达第10级时,我们将拥有210组房屋。这是1024片叶子。
当我们将房屋分成许多树叶时,每片叶子中的房屋数量也会减少。拥有极少数房屋的树叶将做出与房屋实际值非常接近的预测,但它们可能会对新数据做出非常不可靠的预测(因为每个预测仅基于少数房屋)。
这是一种称为过度拟合的现象,其中模型几乎完美地匹配训练数据,但在验证和其他新数据方面表现不佳。另一方面,如果我们使树很浅,它不会将房屋分成非常不同的组。
在极端情况下,如果一棵树将房屋分成2或4,每个房屋仍然有各种各样的房屋。对于大多数房屋来说,结果预测可能相差甚远,即使在训练数据中也是如此(由于同样的原因,验证也会很糟糕)。当模型无法捕获数据中的重要区别和模式时,即使在训练数据中它也表现不佳,这称为欠拟合。
由于我们关注新数据的准确性,我们根据验证数据估计,我们希望找到欠拟合和过拟合之间的最佳点。我们想要以下(红色)验证曲线的低点
有一些控制树深度的替代方案,并且许多允许通过树的一些路线具有比其他路线更大的深度。 但是max_leaf_nodes参数提供了一种非常合理的方法来控制过拟合与欠拟合。 我们允许模型生成的叶子越多,我们从上图中的欠拟合区域移动到过度拟合区域。
我们可以使用效用函数来帮助比较max_leaf_nodes的不同值的MAE分数:
将数据加载到train_X,val_X,train_y和val_y中
我们可以使用for循环来比较使用max_leaf_nodes的不同值构建的模型的准确性
我们可以看到500是最优的最大叶节点数
(二)结论
过拟合:捕获将来不会再发生的虚假模式,导致预测不太准确 欠拟合:未能捕获相关模式,再次导致预测不准确。
我们使用未在模型训练中使用的验证数据来测量候选模型的准确性。 这让我们尝试了许多候选模型并选择最佳模型。
来源:oschina
链接:https://my.oschina.net/u/4389636/blog/3200893