Overfitting and Underfitting
Overview
使用机器学习时,有很多方法可以解决。 机器学习中一些最常见的问题是过度拟合和不合适。 为了理解这些概念,让我们设想一个机器学习模型,它试图学习数字分类,并且可以访问训练数据集和测试数据集。
Overfitting
当模型从训练数据中学到太多时,模型会受到过度拟合的影响,并且因此在实践中表现不佳。 这通常是由于模型过多地暴露于训练数据引起的。 对于数字分类示例,如果模型以这种方式过度拟合,则可能会捕捉到误导性的微小细节,例如杂散标记作为特定数字的指示。
当您查看图形的中间时,估计看起来相当不错,但边缘有很大的误差。 实际上,这个错误并不总是在边缘情况下,并且可以在任何地方弹出。 训练中的噪音可能会导致错误,如下图所示。
在该示例中,数据通过多项式度过拟合。 所示的点对于函数y = x ^ 2是正确的,但是在这些点之外并不接近函数。
Underfitting
当模型没有从训练数据中学到足够的东西时,模型会受到欠配合的影响,并且因此在实践中表现不佳。 与之前的想法形成鲜明对比,这个问题是由于不让模型从培训数据中学到足够的东西。 在数字分类示例中,如果训练集太小或者模型没有足够的尝试从中学习,那么它将无法选择数字的关键特征。
这种估计的问题对人眼来说很明显,模型应该是非线性的,而只是一条简单的线。 在机器学习中,这可能是不合适的结果,模型没有足够的暴露于训练数据以适应它,并且目前处于简单状态。
Motivation
找到一个合适的机器是机器学习的核心问题之一。 在掌握特定方法之前,掌握如何避免拟合问题可以使模型保持正轨。 寻找合适的思维方式,而不是在模型上投入更多的学习时间是非常重要的。
Code
过度拟合的示例代码显示了基于多项式插值的一些基本示例,试图找到图的方程。 在overfitting.py文件中,您可以看到正在建模的真实函数,以及一些显示不准确的估计。
估计数表示过度拟合和欠拟合。 对于过度拟合,使用更高次多项式(x立方而不是平方)。 虽然所选点的数据相对接近,但它们之外还有一些工件。 然而,欠装配的例子甚至在许多方面都没有达到准确性。 欠拟合类似于在尝试建模二次函数时具有线性模型。 该模型在其训练的点上表现良好,在这种情况下是用于线性估计的点,但在其他方面表现不佳。
import matplotlib.pyplot as plt
def real_funct(x):
return [-(i**2) for i in x]
def over_funct(x):
return [-0.5*(i**3) - (i**2) for i in x]
def under_funct(x):
return [6*i + 9 for i in x]
#create x values, and run them through each function
x = range(-3, 4, 1)
real_y = real_funct(x)
over_y = over_funct(x)
under_y = under_funct(x)
#Use matplotlib to plot the functions so they can be visually compared.
plt.plot(x, real_y, 'k', label='Real function')
plt.plot(x, over_y, 'r', label='Overfit function')
plt.plot(x, under_y, 'b', label='Underfit function')
plt.legend()
plt.show()
#Output the data in a well formatted way, for the more numerically inclined.
print("An underfit model may output something like this:")
for i in range(0, 7):
print("x: "+ str(x[i]) + ", real y: " + str(real_y[i]) + ", y: " + str(under_y[i]))
print("An overfit model may look a little like this")
for i in range(0, 7):
print("x: "+ str(x[i]) + ", real y: " + str(real_y[i]) + ", y: " + str(over_y[i]))
Conclusion
查看交叉验证和正则化部分,了解有关如何避免机器学习模型中过度拟合的信息。 理想情况下,合适的看起来像这样:
当以任何身份使用机器学习时,经常会出现过度拟合等问题,掌握这一概念非常重要。 本节中的模块是整个存储库中最重要的模块,因为无论实现如何,机器学习总是包含这些基础知识。