过拟合和欠拟合:机器学习模型中的两个重要概念

2023-09-13 22:10:38

🍋引言

在机器学习模型中,过拟合和欠拟合是两种常见的问题。它们在模型训练和预测过程中扮演着重要的角色。了解过拟合和欠拟合的概念、影响、解决方法以及研究现状和趋势,对于提高机器学习模型性能和实用性具有重要意义。

🍋过拟合和欠拟合的概念

过拟合是指机器学习模型在训练数据上表现优良,但在测试数据上表现较差的现象。这意味着模型在训练数据集上学习了过多的特定细节,以至于在新的、未见过的数据上无法泛化。

相反,欠拟合是指机器学习模型在训练数据上和测试数据上都表现较差的现象。这意味着模型没有足够的学习能力来捕捉数据中的关键特征和模式。

🍋过拟合和欠拟合的影响与危害

过拟合和欠拟合都会对机器学习模型的性能产生负面影响。过拟合会导致模型在测试数据上的性能下降,使得模型无法泛化到实际应用场景。欠拟合则会使模型在训练数据上和测试数据上的性能都较差,无法准确预测新数据的标签或类别。

此外,过拟合和欠拟合还可能使模型对新数据的适应能力下降,导致在实际应用中效果不佳。因此,了解如何避免过拟合和欠拟合对于提高机器学习模型的性能至关重要。

🍋过拟合和欠拟合的原因与解决方法

过拟合和欠拟合的原因各不相同,但都与模型的复杂度和训练数据的量有关。过拟合通常由于模型复杂度过高,导致在训练数据上过度拟合,无法泛化到测试数据。解决方法包括简化模型、增加数据量、使用正则化方法等。

欠拟合则通常由于模型复杂度过低,无法捕捉到数据中的关键特征和模式。解决方法包括增加模型复杂度、使用集成学习方法、改进特征工程等。

🍋过拟合和欠拟合的研究现状与发展趋势

过拟合和欠拟合作为机器学习领域的重要研究课题,已经得到了广泛的关注和研究。目前,研究者们正在不断探索新的方法和技术来解决这些问题。

在未来,过拟合和欠拟合的研究将更加深入。一方面,研究者们将尝试开发更加高效的正则化方法和集成学习算法,以进一步提高模型的泛化能力和性能。另一方面,随着深度学习等新型算法的不断发展,如何将其应用于解决过拟合和欠拟合问题也将成为研究的重要方向。

🍋过拟合&欠拟合—案例

我们围绕上篇多项式回归,来介绍一下过拟合和欠拟合的案例

上篇其实已经展示了欠拟合
在这里插入图片描述
欠拟合比较好整,可以用多种方式提高模型的准确率,但是过拟合呢,下面我来简单介绍一下


首先导入一些必要的库

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures

然后我们还是准备之前的数据,这里我们设置了一个随机种子,保证大家的数据一致性,方便检阅

x = np.random.uniform(-3,3,size=100)
X = x.reshape(-1,1)
np.random.seed(666)
y = 0.5*x**2+x+3+np.random.normal(0,1,size=100)
X_train,X_test,y_train,y_test = train_test_split(X,y)

接下来我们定义两个函数polynomialRegression和plot_model,下面我一一解释
首先是polynomialRegression函数,其实就是之前的管道,它可以将输入数据转换为指定的多项式次数,然后对其进行标准化,并最后拟合一个线性回归模型

def polynomialRegression(degree):
    return Pipeline([
        ('poly',PolynomialFeatures(degree=degree)),
    ('std_scaler',StandardScaler()),
    ('lin_reg',LinearRegression())
    ])

再创建一个plot_model函数,用来进行绘制

def plot_model(poly_reg):
    y_predict = poly_reg.predict(X)
    plt.scatter(X,y)
    plt.plot(np.sort(x),y_predict[np.argsort(x)],color='r')
    plt.show()

我们接受训练好的模型poly_reg。这里的np.argsort(x)返回的是x排序后的索引,因此y_predict[np.argsort(x)]可以得到排序后的预测值。

接下来我们分别使用二次、十次、五十次、一百次多项式进行拟合数据

poly_reg = polynomialRegression(2)
poly_reg.fit(X,y)
y_predict = poly_reg.predict(X)
print(mean_squared_error(y,y_predict))
plot_model(poly_reg)

运行结果如下
在这里插入图片描述

poly_reg = polynomialRegression(10)
poly_reg.fit(X,y)
y_predict = poly_reg.predict(X)
print(mean_squared_error(y,y_predict))
plot_model(poly_reg)

运行结果如下
在这里插入图片描述

poly_reg = polynomialRegression(50)
poly_reg.fit(X,y)
y_predict = poly_reg.predict(X)
print(mean_squared_error(y,y_predict))
plot_model(poly_reg)

运行结果如下
在这里插入图片描述

poly_reg = polynomialRegression(100)
poly_reg.fit(X,y)
y_predict = poly_reg.predict(X)
print(mean_squared_error(y,y_predict))
plot_model(poly_reg)

运行结果如下
在这里插入图片描述
我们不难看出,目的为了拟合所有的特征点,导致模型变得过于复杂,这种情况就叫过拟合

接下来我们将训练好的模型进行预测并绘制(这里使用的是一百次)

x_plot = np.linspace(-3,3,100).reshape(100,1)
y_plot = poly_reg.predict(x_plot)

plt.scatter(x,y)
plt.plot(x_plot,y_plot,color='r')
plt.axis([-3,3,-1,10])
plt.show()

运行结果如下
在这里插入图片描述
可以看出很糟糕,这就是过拟合带来的后果。就像识别一只猫和一只狗,过拟合会导致猫换个色就识别不出来是猫了,欠拟合则会阴差阳错的将猫识别为狗

🍋总结

过拟合和欠拟合是机器学习过程中的两个重要概念,对于提高模型的性能和实用性具有重要意义。了解过拟合和欠拟合的概念、影响、解决方法以及研究现状和发展趋势,有助于我们在实际应用中更好地应对和解决这些问题。

未来,过拟合和欠拟合的研究将继续深入发展,研究者们将不断探索新的方法和技术以解决这些问题。随着机器学习技术的广泛应用,过拟合和欠拟合的研究也将具有更加实际的应用价值。
请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

更多推荐

Java 华为真题-选修课

需求:现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的降序排序,成绩相同时按照学生的学号升序排序。输入描述第一行为第一门选修课学生的成绩第二行为第二门选修课学生的成绩,每行数据中学生之间以

区块链技术优势和应用

区块链技术是一种分布式账本技术,它具有去中心化、不可篡改、公开透明等优势,可以广泛应用于各个领域。以下是区块链技术的一些应用场景和优势:1、应用金融领域:区块链技术可以用于实现安全、高效、低成本的支付和结算,同时也可以进行身份认证和信用评级,可以有效地防止欺诈和洗钱等金融犯罪活动。物流领域:区块链技术可以实现全程追溯和

【Hash表】找出出现一次的数字-力扣 136

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kuan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kaf

蓝蓝设计为教育行业提供软件UI交互设计服务

在教育行业,软件的用户体验设计对于提供优质教育体验至关重要。教育行业软件用户体验设计需要考虑到学生和教师的需求,以及教育环境的特殊性。为了确保设计的成功,选择一家专业的设计公司是至关重要的,而北京蓝蓝设计公司就是您的最佳选择。北京蓝蓝设计公司是一家在教育行业软件用户体验设计领域拥有丰富经验的专业团队。我们深知教育行业软

elasticsearch索引同步

通常项目中使用elasticsearch需要完成索引同步,索引同步的方法很多:#1、针对实时性非常高的场景需要满足数据的及时同步,可以同步调用,或使用Canal去实现。1)同步调用即在向MySQL写数据后远程调用搜索服务的接口写入索引,此方法简单但是耦合代码太高。2)可以使用一个中间的软件canal解决耦合性的问题,但

Stable DIffusion 炫酷应用 | AI嵌入艺术字+光影光效

目录1生成AI艺术字基本流程1.1生成黑白图1.2启用ControlNet参数设置1.3选择大模型写提示词2不同效果组合2.1更改提示词2.2更改ControlNet2.2.1更改模型或者预处理器2.2.2更改参数3.其他应用3.1AI光影字本节需要用到ControlNet,可以查看之前博文StableDiffusio

【Qt】Qt中的中心部件意义

setCentralWidget()是QWidget类的一个成员函数,用于设置窗口的中心部件。中心部件是窗口中占据主要区域的部件,通常是用来显示应用程序的主要内容。以下是setCentralWidget()函数的用法示例:QWidget*centralWidget=newQWidget(this);setCentral

【面试题】forEach能跳出循环吗?

前端面试题库(面试必备)推荐:★★★★★地址:前端面试题库【国庆头像】-国庆爱国程序员头像!总有一款适合你!如果面试官,或者有人问你foreach怎么跳出循环,请你大声的告诉ta,跳不出!!!!!!!!!!foreach跳不出循环为什么呢?先看看foreach大体实现。Array.prototype.customFor

Zabbix介绍与安装

目录一、概述二、zabbix的主要功能三、zabbix监控原理四、Zabbix监控模式五、zabbix的架构server-clientserver-proxy-clientmaster-node-client六、zabbix的安装安装zabbix服务端安装zabbix客户端测试zabbix1、在Web页面中添加agen

Windows脚本导入导出Mongodb数据库文件实现备份与恢复

导出指定时间范围的数据@echooffsetlocalrem提前将MongoDB安装的bin路径加到系统环境变量PATH里面,方便直接运行mongodump命令ifnotexistD:\MongoDB_backupgotocreategotostart:createrem如果没有创建导出文件目录,那么在此步骤创建mdD

链式法则:概率论描述语言模型

目录1.事件相互独立2.链式法则3.示例4.语言模型中的链式法则1.事件相互独立事件相互独立就是:一个事件的发生与否,不会影响另外一个事件的发生。当a和b两个事件互相独立时,有:P(a|b)=P(a)推广到3个事件就有下面这个公式:P(a|b,c)=P(a|c)其中:P(a|b,c)表示在b和c事件都发生的情况下,a事

热文推荐