登录
首页大数据时代学习曲线--帮你清晰判断过拟合和欠拟合
学习曲线--帮你清晰判断过拟合和欠拟合
2020-07-09
收藏

前面小编给大家简单介绍过拟合欠拟合时,提到了一个概念:学习曲线,我们通过学习曲线能够很清晰的判别出模型现在说出的状态是欠拟合还是过拟合,下面小编具体整理了学习曲线的相关内容,希望对大家有所帮助。

学习曲线(learning curve)是不同训练集大小,模型在训练集和验证集上的得分变化曲线。横坐标为·样本数,纵坐标为训练和交叉验证集上的得分(如准确率)。

模型在新数据上的表现如何,都能清晰地在展现在学习去线上,我们也能通过这些表现,进而判断模型是否方差偏高或者偏差过高,以及增大训练集是否可以减小过拟合

如图所示:

(1)当训练集和测试集的误差收敛但却很高时,为高偏差

左上图中训练集和验证集上的曲线能够收敛,但偏差很高,训练集和验证集上准确率相差很大,却都很差。这种情况下模型对已知数据和未知数据都不能进行准确的预测,很可能是欠拟合

方法:

增加模型参数,采用更复杂的模型,减小正则项。

注意:此时通过增加数据量是不起作用的。

(2)当训练集和测试集上误差之间有大的差距时,为高方差。

当训练集的准确率比其他独立数据集上的测试结果的准确率要高时,一般都是过拟合

右上图中,训练集和验证集的准确率差距很大,这种情况下,模型能够很好的拟合已知数据,但是泛化能力不足,属于高方差,很可能是过拟合

方法:

增大训练集,降低模型复杂度,增大正则项,或者通过特征选择减少特征数。

(3)右下方图,也是最理想情况:找到偏差和方差都很小的状态,就是收敛而且误差较小。

学习曲线的具体操作:

len(X_train) 个训练样本,训练出 len(X_train) 个模型,第一次使用一个样本训练出第一个模型,第二次使用两个样本训练出第二个模型,… ,第 len(X_train) 次使用 len(X_train) 个样本训练出最后一个模型;

每个模型对于训练这个模型所使用的部分训练数据集的预测值:y_train_predict = 模型.predict(X_train[ : i ]);

每个模型对于训练这个模型所使用的部分训练数据集的均方误差:mean_squared_error(y_train[ : i ], y_train_predict);

每个模型对于整个测试数据集的预测值:y_test_predict = 模型.predict(X_test)

每个模型对于整个测试数据集的预测的均方误差:mean_squared_error(y_test, y_test_predict);

绘制每次训练模型所用的样本数量与该模型对应的部分训练数据集的均方误差的平方根的关系曲线:plt.plot([i for i in range(1. len(X_train)+1)],np.sqrt(train_score), label=“train”)

绘制每次训练模型所用的样本数量与该模型对应的测试数据集的预测的均方误差的关系曲线:plt.plot([i for i in range(1. len(X_train)+1)],np.sqrt(test_score), label=“test”)

数据分析咨询请扫描二维码

客服在线
立即咨询