这个分类模型是否过拟合?
Is this classification model overfitting?
我正在执行 url 分类(网络钓鱼 - 非网络钓鱼),并为我的模型 (Gradient Boost) 绘制了学习曲线(训练与交叉验证分数)。
我的观点
这两条曲线似乎收敛了,差别不大。训练集的准确率稍高是正常的)。 (图一)
问题
我在机器学习方面的经验有限,所以我想问问你的意见。我处理问题的方式是否正确?这个模型好还是过拟合?
注:类均衡,特征选择得当
相关代码
from yellowbrick.model_selection import LearningCurve
def plot_learning_curves(Χ, y, model):
# Create the learning curve visualizer
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) # Fit the data to the visualizer
visualizer.poof()
首先,在你的图表中有 8 个不同的模型。
很难判断其中一个是否过度拟合,因为可以使用 "epoch vs performance (train / valid)" 图检测到过度拟合(在您的情况下会有 8 个)。
过拟合是指经过一定数量的epoch后,随着epoch数量的增加,训练准确率上升而验证准确率下降。例如,当您关于问题复杂性的数据点太少时,可能会出现这种情况,因此您的模型使用了虚假相关。
根据您的图表,我们可以说您的问题的复杂性似乎需要 "high" 个数字或训练实例,因为随着您添加更多训练实例,您的验证性能会不断提高。 <10000 的模型有可能过度拟合,但你的 >50000 也可能过度拟合,我们没有看到,因为你正在使用提前停止!
希望对您有所帮助
我正在执行 url 分类(网络钓鱼 - 非网络钓鱼),并为我的模型 (Gradient Boost) 绘制了学习曲线(训练与交叉验证分数)。
我的观点
这两条曲线似乎收敛了,差别不大。训练集的准确率稍高是正常的)。 (图一)
问题
我在机器学习方面的经验有限,所以我想问问你的意见。我处理问题的方式是否正确?这个模型好还是过拟合?
注:类均衡,特征选择得当
相关代码
from yellowbrick.model_selection import LearningCurve
def plot_learning_curves(Χ, y, model):
# Create the learning curve visualizer
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) # Fit the data to the visualizer
visualizer.poof()
首先,在你的图表中有 8 个不同的模型。
很难判断其中一个是否过度拟合,因为可以使用 "epoch vs performance (train / valid)" 图检测到过度拟合(在您的情况下会有 8 个)。
过拟合是指经过一定数量的epoch后,随着epoch数量的增加,训练准确率上升而验证准确率下降。例如,当您关于问题复杂性的数据点太少时,可能会出现这种情况,因此您的模型使用了虚假相关。
根据您的图表,我们可以说您的问题的复杂性似乎需要 "high" 个数字或训练实例,因为随着您添加更多训练实例,您的验证性能会不断提高。 <10000 的模型有可能过度拟合,但你的 >50000 也可能过度拟合,我们没有看到,因为你正在使用提前停止!
希望对您有所帮助