其他分享
首页 > 其他分享> > 学习曲线

学习曲线

作者:互联网

来源:https://www.cnblogs.com/volcao/p/9291551.html

一、基础理解

  1. 查看模型的学习效果;
  2. 通过学习曲线可以清晰的看出模型对数据的过拟合和欠拟合;

 

  1. len(X_train) 个训练样本,训练出 len(X_train) 个模型,第一次使用一个样本训练出第一个模型,第二次使用两个样本训练出第二个模型,... ,第 len(X_train) 次使用 len(X_train) 个样本训练出最后一个模型;
  2. 每个模型对于训练这个模型所使用的部分训练数据集的预测值:y_train_predict = 模型.predict(X_train[ : i ]);
  3. 每个模型对于训练这个模型所使用的部分训练数据集的均方误差:mean_squared_error(y_train[ : i ], y_train_predict);
  4. 每个模型对于整个测试数据集的预测值:y_test_predict = 模型.predict(X_test)
  5. 每个模型对于整个测试数据集的预测的均方误差:mean_squared_error(y_test, y_test_predict);
  6. 绘制每次训练模型所用的样本数量与该模型对应的部分训练数据集的均方误差的平方根的关系曲线:plt.plot([i for i in range(1, len(X_train)+1)],np.sqrt(train_score), label="train")
  7. 绘制每次训练模型所用的样本数量与该模型对应的测试数据集的预测的均方误差的关系曲线:plt.plot([i for i in range(1, len(X_train)+1)],np.sqrt(test_score), label="test")

 

 

二、实例

 1)模拟数据集

 

 

 

 2)使用线性回归拟合数据集并绘制学习曲线

 

  1. 相对于训练数据集的均方误差在逐渐增大:因为随着数据集的增大,样本点的增多,模型越难拟合住所有的数据,相应的均方误差会逐渐的累积,越来越大,但随着训练数据集的增大,均方差的逐渐累积量越来越小,模型相应的会越来越稳定;
  2. 相对于测试数据集的测试误差逐渐减小,当数据量增大到一定程度,测试误差趋于相对稳定;
  3. 最终的训练误差和测试误差几乎接近,相当于一个级别,不过测试误差比训练误差相对较大一点,因为训练数据集训练出的模型对训练数据集拟合的程度较好,相对的模型对应训练数据集的均方误差相对较小;

 

 3)将绘制学习曲线的方法封装成一个函数

  1. 当使用该函数时传入算法,该算法的变量要进行实例化,如:
    plot_learning_curve(PolynomialRegression(degree=2), X_train, X_test, y_train, y_test)
  2. 可以直接传承实例化后的变量,如:lin_reg = LinearRegression(),
    plot_learning_curve(lin_reg, X_train, X_test, y_train, y_test)

 

 

  1. degree = 2
    poly2_reg = PolynomialRegression(degree=2)
    plot_learning_curve(poly2_reg, X_train, X_test, y_train, y_test)

  2. degree = 20
    plot_learning_curve(PolynomialRegression(degree=20), X_train, X_test, y_train, y_test)

 

  1. 对于欠拟合情况,和最佳的情况相比较,相对的 train 和 test 两根曲线趋于稳定的位置,比最佳的两个曲线趋于稳定的位置较高:说明,无论对于训练数据集还是测试数据集,相应的误差都比较大,这是因为本身模型选的不正确,即使在训练数据集上,误差也比较大;
  1. 对于过拟合情况,在训练数据集上,相应的误差和最佳时的误差差不多,甚至当 degree 取值更大时,过拟合的误差比最佳时的误差小;
  2. 对于过拟合情况,测试数据集的误差相比较大,并且从图上看出,测试数据集的误差曲线距离训练数据集的误差曲线较远:说明,此时模型的泛化能力不够好,对于新的数据预测误差较大;

标签:误差,训练,predict,模型,train,学习曲线,test
来源: https://www.cnblogs.com/cmybky/p/11765993.html