当前位置:   article > 正文

机器学习中的欠拟合和过拟合

机器学习中的欠拟合和过拟合

定义

     欠拟合 (Underfitting):

  • 定义:模型在训练数据和测试数据上都表现不佳。这表明模型没有很好地捕捉数据中的趋势。
  • 现象:训练集和测试集准确率都很低。
  • 原因:模型过于简单,参数过少,无法捕捉数据的复杂关系。

     过拟合 (Overfitting):

  • 定义:模型在训练数据上表现非常好,但在测试数据上表现不佳。这表明模型捕捉到了训练数据中的噪声和细节,而不是数据的整体趋势。
  • 现象:训练集准确率高,测试集准确率低。
  • 原因:模型过于复杂,参数过多,导致对训练数据的过度拟合。

图形表达——以线性回归为例

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from sklearn.linear_model import LinearRegression
  4. from sklearn.metrics import mean_squared_error
  5. from sklearn.model_selection import train_test_split
  6. # 设置随机数种子
  7. np.random.seed(666)
  8. # 解决中文显示问题
  9. plt.rcParams['font.sans-serif'] = ['SimHei']
  10. plt.rcParams['axes.unicode_minus'] = False
  11. # 生成数据
  12. x = np.random.uniform(-3, 3, size=100)
  13. X = x.reshape(-1, 1)
  14. y = 0.5 * x**2 + x + np.random.normal(0, 1, size=100)
  15. # 绘制原始数据
  16. plt.figure(figsize=(12, 8))
  17. plt.scatter(X, y, label='原始数据', color='blue')
  18. # 模拟欠拟合:线性回归
  19. X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=5)
  20. linear = LinearRegression()
  21. linear.fit(X_train, y_train)
  22. y_predict = linear.predict(X_test)
  23. plt.plot(x, linear.predict(X), color='red', label='线性回归 (欠拟合)')
  24. print(f"线性回归训练集均方误差: {mean_squared_error(y_train, linear.predict(X_train)):.4f}")
  25. print(f"线性回归测试集均方误差: {mean_squared_error(y_test, y_predict):.4f}")
  26. # 模拟合适拟合:二次回归
  27. X2 = np.hstack([X, X**2])
  28. X_train, X_test, y_train, y_test = train_test_split(X2, y, random_state=5)
  29. linear.fit(X_train, y_train)
  30. y_predict2 = linear.predict(X_test)
  31. plt.plot(np.sort(x), linear.predict(X2)[np.argsort(x)], color='green', label='二次回归 (合适拟合)')
  32. print(f"二次回归训练集均方误差: {mean_squared_error(y_train, linear.predict(X_train)):.4f}")
  33. print(f"二次回归测试集均方误差: {mean_squared_error(y_test, y_predict2):.4f}")
  34. # 模拟过拟合:高次多项式回归
  35. X10 = np.hstack([X2, X**3, X**4, X**5, X**6, X**7, X**8, X**9, X**10])
  36. X_train, X_test, y_train, y_test = train_test_split(X10, y, random_state=5)
  37. linear.fit(X_train, y_train)
  38. y_predict3 = linear.predict(X_test)
  39. plt.plot(np.sort(x), linear.predict(X10)[np.argsort(x)], color='orange', label='高次多项式回归 (过拟合)')
  40. print(f"高次多项式回归训练集均方误差: {mean_squared_error(y_train, linear.predict(X_train)):.4f}")
  41. print(f"高次多项式回归测试集均方误差: {mean_squared_error(y_test, y_predict3):.4f}")
  42. # 添加图例和标签
  43. plt.xlabel('x 值', fontsize=14)
  44. plt.ylabel('y 值', fontsize=14)
  45. plt.title('欠拟合、合适拟合和过拟合示例', fontsize=16)
  46. plt.legend(fontsize=12)
  47. plt.grid(True)
  48. # 显示图形
  49. plt.show()

 

 一次回归训练集均方误差: 3.0496
一次回归测试集均方误差: 3.1531
二次回归训练集均方误差: 1.0951
二次回归测试集均方误差: 1.1119
高次多项式回归训练集均方误差: 0.9992
高次多项式回归测试集均方误差: 1.4146

        测试集和训练集上 的均方误差随着模型复杂度提高而减小,拟合效果越好,但在很多高次项加入时出现了过拟合。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/844518
推荐阅读
相关标签
  

闽ICP备14008679号