我正在进行URL分类(钓鱼 – 非钓鱼),并为我的模型(梯度提升)绘制了学习曲线图(训练与交叉验证得分)。
我的看法
这两条曲线似乎趋于一致,差异并不显著。训练集的准确度略高一些是正常的。(图1)
问题
我在机器学习方面的经验有限,因此我想听听您的意见。我解决这个问题的方法是否正确?这个模型是否正常,还是存在过拟合的情况?
注意:类别是平衡的,特征选择得当
相关代码
from yellowbrick.model_selection import LearningCurvedef plot_learning_curves(Χ, y, model): # 创建学习曲线可视化工具 cv = StratifiedKFold(n_splits=5) sizes = np.linspace(0.1, 1.0, 8) visualizer = LearningCurve(model, cv=cv, train_sizes=sizes, n_jobs=4) visualizer.fit(Χ, y) # 拟合数据到可视化工具 visualizer.poof()
回答:
首先,您的图表中展示了8个不同的模型。
很难判断其中一个是否过拟合,因为过拟合可以通过“轮数 vs 性能(训练/验证)”图表来检测(在您的案例中会有8个这样的图表)。
过拟合意味着,在一定轮数之后,随着轮数的增加,训练准确度上升而验证准确度下降。例如,当您的数据点相对于问题的复杂度太少时,可能会出现这种情况,因此您的模型可能在利用虚假的相关性。
根据您的图表,我们可以说您的问题的复杂性似乎需要“高”数量的训练实例,因为随着训练实例的增加,您的验证性能持续提高。可能少于10000个实例的模型存在过拟合,但您的超过50000个实例的模型也可能过拟合,我们没有看到这一点是因为您使用了提前停止机制!