CORE CONCEPT ----Overfitting and Underfitting

博客围绕机器学习中过拟合和欠拟合问题展开。过拟合是模型从训练数据中学到太多,受训练数据噪音影响,实践表现不佳;欠拟合则是模型学习不足,无法抓住关键特征。还给出示例代码,最后指出可通过交叉验证和正则化避免过拟合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

查看交叉验证和正则化部分,了解有关如何避免机器学习模型中过度拟合的信息。 理想情况下,合适的看起来像这样:

当以任何身份使用机器学习时,经常会出现过度拟合等问题,掌握这一概念非常重要。 本节中的模块是整个存储库中最重要的模块,因为无论实现如何,机器学习总是包含这些基础知识。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九妹123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值