一、欠拟合与过拟合

在这里插入图片描述
在这里插入图片描述

欠拟合(Underfitting)

欠拟合是指模型在训练数据上表现不佳,同时在新的未见过的数据上也表现不佳。这通常发生在模型过于简单,无法捕捉数据中的复杂模式时。欠拟合模型的表现特征如下:

  • 训练误差较高。
  • 测试误差同样较高。
  • 模型可能过于简化,不能充分学习训练数据中的模式。

原因

  • 模型过于简单(如用线性模型拟合非线性关系)
  • 特征不足
  • 正则化过强

解决方案

  • 增加模型复杂度
  • 添加更多相关特征
  • 减少正则化强度

过拟合(Overfitting)

过拟合是指模型在训练数据上表现得非常好,但在新的未见过的数据上表现较差。这通常发生在模型过于复杂,以至于它不仅学习了数据中的真实模式,还学习了噪声和异常值。过拟合模型的表现特征如下:

  • 训练误差非常低。

  • 测试误差较高。

  • 模型可能过于复杂,以至于它对训练数据进行了过度拟合。

原因

  • 模型过于复杂
  • 训练数据不足
  • 训练迭代次数过多

解决方案

  • 增加训练数据
  • 使用正则化
  • 早停(Early stopping)
  • 简化模型

正则化(Regularization)

正则化通过在损失函数中添加惩罚项来防止过拟合,同时,增加模型的鲁棒性,鲁棒是Robust 的音译,也就是强壮的意思。就像计算机软件在面临攻击、网络过载等情况下能够不死机不崩溃,这就是软件的鲁棒性,鲁棒性调优就是让模型拥有更好的鲁棒性,也就是让模型的泛化能力和推广能力更加的强大。

比如,下面两个方程描述同一条直线,哪个更好?

y=0.5x1+0.6x2+0.7y=0.5x_1+0.6x_2+0.7y=0.5x1+0.6x2+0.7

y=5x1+6x2+7y=5x_1+6x_2+7y=5x1+6x2+7

第一个更好,因为下面的公式是上面的十倍,当w越小公式的容错的能力就越好。我们都知道人工智能中回归是有误差的,为了把误差降低而拟合出来的一个接近真实的公式,比如把一个测试数据[10,20]带入计算得到的值跟真实值会存在一定的误差,但是第二个方程会把误差放大,公式中y=WTxy = W^Txy=WTx,当xxx有一点错误,这个错误会通过w放大。但是w不能太小,当w太小时(比如都趋近0),模型就没有意义了,无法应用。想要有一定的容错率又要保证正确率就要由正则项来发挥作用了!
所以**正则化(鲁棒性调优)**的本质就是牺牲模型在训练集上的正确率来提高推广、泛化能力,W在数值上越小越好,这样能抵抗数值的扰动。同时为了保证模型的正确率W又不能极小。因此将原来的损失函数加上一个惩罚项使得计算出来的模型W相对小一些,就是正则化。这里面损失函数就是原来固有的损失函数,比如回归的话通常是MSE,然后在加上一部分惩罚项来使得计算出来的模型W相对小一些来带来泛化能力。

L2正则化(Ridge)

J(θ) = MSE(θ) + α∑θᵢ²

惩罚大参数值,使权重平滑分布

L1正则化(Lasso)

J(θ) = MSE(θ) + α∑|θᵢ|

可产生稀疏权重矩阵,自动执行特征选择

二、岭回归(Ridge Regression)

概念解析

岭回归是线性回归的L2正则化版本,通过添加权重平方和惩罚项来防止过拟合。

损失函数

J(θ) = ||Xθ - y||²₂ + α||θ||²₂

其中α控制正则化强度,α=0时退化为普通线性回归。

特点:

  • 岭回归不会将权重压缩到零,这意味着所有特征都会保留在模型中,但它们的权重会被缩小。
  • 适用于特征间存在多重共线性的情况。
  • 岭回归产生的模型通常更为平滑,因为它对所有特征都有影响。

图解

在这里插入图片描述

椭圆代表的是等高线(同一个圆上的点的损失是一样的),圆形代表的是L2(同一个圆上的w12+w22w1^2+w2^2w12+w22是相等的),观察红色的点,的w12+w22w1^2+w2^2w12+w22和越小,损失越大;观察到绿色的点,相同的损失,w12+w22w1^2+w2^2w12+w22也可以优化(变小),这也是可以使用岭回归,优化模型参数使得w1、w2变小,来增强模型鲁棒性。

API使用

from sklearn.linear_model import Ridgeridge = Ridge(alpha=1.0)  # alpha是正则化强度
ridge.fit(X_train, y_train)
y_pred = ridge.predict(X_test)

示例

假设我们有一组房屋数据,预测房价:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 加载数据
boston = load_boston()
X, y = boston.data, boston.target# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 训练岭回归模型
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)# 评估
print("Train score:", ridge.score(X_train, y_train))
print("Test score:", ridge.score(X_test, y_test))

三、拉索回归(Lasso Regression)

概念解析

拉索回归是线性回归的L1正则化版本,可以产生稀疏模型,自动执行特征选择。

损失函数

J(θ) = (1/2m)||Xθ - y||²₂ + α||θ||₁

其中||θ||₁表示L1范数(绝对值之和)。

特点:

  • 拉索回归可以将一些权重压缩到零,从而实现特征选择。这意味着模型最终可能只包含一部分特征。
  • 适用于特征数量远大于样本数量的情况,或者当特征间存在相关性时,可以从中选择最相关的特征。
  • 拉索回归产生的模型可能更简单,因为它会去除一些不重要的特征。

图解
在这里插入图片描述

椭圆代表的是等高线(同一个圆上的点的损失是一样的),菱形代表的是L1(同一个菱形上的w1+w2的绝对值是相同的),观察红色的点,w1+w2的绝对值越小,损失越大;观察到绿色的点,相同的损失,w1+w2的绝对值也可以优化(变小),这也是可以使用拉索回归,优化模型参数使得w1、w2变小,来达到增强模型的鲁棒性。

API使用

from sklearn.linear_model import Lassolasso = Lasso(alpha=0.1)  # alpha是正则化强度
lasso.fit(X_train, y_train)
y_pred = lasso.predict(X_test)

示例

继续使用波士顿房价数据:

lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)# 查看系数(很多可能为0)
print("Coefficients:", lasso.coef_)# 评估
print("Train score:", lasso.score(X_train, y_train))
print("Test score:", lasso.score(X_test, y_test))

四、逻辑回归(Logistic Regression)

概念与原理

逻辑回归虽然名为"回归",但实际是分类算法,主要用于二分类问题。比如:是好瓜还是坏瓜,健康还是不健康。

核心思想:使用sigmoid函数将线性回归输出映射到(0,1)区间,表示概率。

原理

逻辑回归的输入是线性回归的输出

线性回归: h(w)=w1x1+w2x2+....+bh(w)=w_1x_1+w_2x_2+....+bh(w)=w1x1+w2x2+....+b

sigmoid激活函数: f(x)=11+e−h(w)f(x)=\frac{1}{1+e^{-h(w)}}f(x)=1+eh(w)1

决策边界:当 f(x)f(x)f(x) ≥ 0.5时预测1,否则预测0

损失函数(交叉熵损失)

J(θ) = -[y·log(σ(θᵀx)) + (1-y)·log(1-σ(θᵀx))]

API使用

from sklearn.linear_model import LogisticRegressionlog_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
y_pred = log_reg.predict(X_test)

示例

使用鸢尾花数据集进行二分类:

from sklearn.datasets import load_iris# 只取两个类别做二分类
iris = load_iris()
X = iris.data[iris.target != 2]
y = iris.target[iris.target != 2]# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练逻辑回归模型
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)# 评估
print("Accuracy:", log_reg.score(X_test, y_test))

五、无监督学习之K-means算法

无监督学习概念

无监督学习与监督学习不同,它处理没有标签的数据,目标是发现数据中的隐藏模式或结构。

主要应用

  • 聚类
  • 降维
  • 异常检测
  • 关联规则学习

K-means算法

K-means是最流行的聚类算法之一,将数据划分为K个簇。

算法步骤

  1. 随机选择K个中心点(质心)
  2. 将每个点分配到最近的质心形成簇
  3. 重新计算每个簇的质心(均值点)
  4. 重复2-3步直到质心不再变化或达到最大迭代次数

数学表达
最小化以下目标函数:

J = ∑∑||xⁱ - μⱼ||²

其中μⱼ是第j个簇的质心。

API使用

from sklearn.cluster import KMeanskmeans = KMeans(n_clusters=3)
kmeans.fit(X)
labels = kmeans.labels_
centers = kmeans.cluster_centers_

示例

使用鸢尾花数据进行聚类:

from sklearn.datasets import load_irisiris = load_iris()
X = iris.data# 使用肘部法则确定最佳K值(实际应用中)
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)# 查看结果
print("Cluster labels:", kmeans.labels_)
print("Cluster centers:", kmeans.cluster_centers_)

总结

本文详细介绍了欠拟合与过拟合问题及其解决方案,特别是正则化技术。然后深入讲解了两种正则化线性回归——岭回归和拉索回归,包括它们的数学原理和实际应用。接着介绍了逻辑回归这一重要的分类算法,最后探讨了无监督学习中的K-means聚类算法。

这些算法构成了传统机器学习的基础知识体系,理解它们的原理和适用场景对于构建有效的机器学习模型至关重要。在实际应用中,通常需要根据具体问题和数据特点选择合适的算法,并通过交叉验证等方法调优参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92051.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92051.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92051.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Datawhale AI夏令营 第三期 task2 稍微改进

在打造基于大语言模型(LLM)文档检索的问答系统中,财经研报类文档是最具挑战的场景之一。它包含图文混排、精细定位需求(页码、文件名)、问题措辞高度多样化等一系列复杂性。 下面的内容是大模型辅助整理的:…

LeetCood算法题~水果成篮

水果成篮 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水…

【Lua】题目小练8

-- 题目 1&#xff1a;定义一个类 Person-- 属性&#xff1a;name、age&#xff0c;其中 age 默认是 0&#xff0c;不能小于 0。-- 方法&#xff1a;introduce()&#xff0c;输出 "My name is <name>, I am <age> years old."-- 要求使用封装思想&#x…

SAP PP CK466

原因 作业价格没有维护 解决方案 KP26

如何解决pip安装报错ModuleNotFoundError: No module named ‘keras’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘keras’问题 摘要 在使用 PyCharm 进行深度学习项目开发时&#xff0c;常常需要通过 pip install keras 来安装 Keras 库。但有时即便命令执行成功&#xff0c…

人工智能领域、图欧科技、IMYAI智能助手2024年全年历史更新大事件汇总

2024年 2024年12月29日 【通知】 1、主站导出文档功能优化升级&#xff0c;新增支持了纯文本WORD导出功能&#xff0c;支持使用WPS软件打开 注&#xff1a;原来的富文本WORD不支持使用WPS打开&#xff0c;只支持系统自带的WORD软件打开&#xff0c;比如Microsoft Office Word 2…

UWB实操:使用UCI CMD测距;UCI CMD是一串数字,创建测距session,配置测距session,开始测距session。

使用UCI CMD测距; UCI CMD是一串数字,创建测距session,配置测距session,开始测距session。根据 FiRa_UCI_Technical_Specification,我们可以分析并组织测距cmd 例如: Fira2.0 1v1 发起 DSTWR 创建测距session:210000052222222200 配置测距session: 2103001F222…

从AUTOSAR角度理解CAN以及CANFD

一、AUTOSAR对CAN和CAN FD的基础定位 CAN&#xff1a;基于传统CAN 2.0B协议&#xff0c;是AUTOSAR早期版本&#xff08;如4.0.3及之前&#xff09;的核心车载通信协议&#xff0c;支持最大8字节 payload&#xff0c;仲裁段波特率通常≤1Mbps&#xff0c;适用于低带宽、高实时性…

第27章:服务部署与容器化

1. 课程引言 在前面的章节中&#xff0c;我们已经完成了电商项目核心服务的开发。然而&#xff0c;开发完成只是项目生命周期的一部分&#xff0c;如何将这些服务高效、可靠地部署到生产环境&#xff0c;是决定项目成败的关键一步。本章将聚焦于服务的部署&#xff0c;重点介绍…

力扣148:排序链表

力扣148:排序链表题目思路代码题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 思路 当我们第一眼看见这道题时心中其实是有思路的&#xff0c;我们不想这是个链表就当它是一个整型数组。那么自然而然就会想到各种各样的排序方法&#xf…

基于k8s环境下的pulsar常用命令(下)

#作者&#xff1a;Unstopabler 文章目录permissionSchemapermission pulsar的权限控制是在namespace级别的 kubectl exec pulsar-toolset-0 -n pulsar – bin/pulsar-admin namespaces grant-permission mytenant/mynamespace –actions produce,consume –role admin10 注…

2.4 组件通信

Props 和 Events&#xff08;父子组件通信&#xff09;Props&#xff1a;父组件向子组件传递数据使用 props。子组件通过声明 props 来接收来自父组件的数据。<!-- 父组件 --> <template><ChildComponent :message"parentMessage" /> </templat…

PCL学习之路-基础知识-(一)

文章目录1.西门子S7系列PLC类型划分(1).大型PLC&#xff1a;S7-400(2).中型PLC&#xff1a;S7-300(3).小型PLC&#xff1a;S7-200系列2.西门子S7外形结构(1).总览&#xff1a;PLC的“器官”分工逻辑3.输出电路(1).小型继电器输出形式(2).大功率晶体管/场效应管输出形式(3).双向…

leetcode654:最大二叉树(递归与单调栈双解法)

文章目录一、 题目描述二、 核心思路&#xff1a;分而治之与递归构造三、代码实现与深度解析四、 关键点与复杂度分析五、拓展解法单调栈解法两种解法对比LeetCode 654. 最大二叉树&#xff0c;【难度&#xff1a;中等&#xff1b;通过率&#xff1a;82.6%】&#xff0c;这道题…

Python 循环语法详解

在编程中&#xff0c;循环是一种非常常见的控制结构。很多时候&#xff0c;我们需要重复做一些事情&#xff0c;比如遍历列表、处理数据、尝试直到成功等。这时候&#xff0c;就离不开循环了。Python 提供了两种主要的循环结构&#xff1a;for 循环 和 while 循环。本篇文章会从…

一个小巧神奇的 USB数据线检测仪

一个小巧的数据线检测仪&#xff0c;检测各种USB数据线是否损坏、通断&#xff0c;TYPE_C、MICRO_B、苹果线、烧录线、网线都可检测。嵌入式开发者的称手工具。 这个是我个人制作的&#xff0c;SMT和连接器比较贵&#xff0c;特别是24PIN的C口连接器&#xff0c;我挂在黄色小鱼…

37.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--增加Github Action

在第二部分&#xff08;微服务基础工具与技术&#xff09;中我们讲解了GitHub Action的相关知识&#xff0c;那么在这一节中&#xff0c;我们将为已有的微服务增加GitHub Action的支持。 一、什么是GitHub Action 虽然前面已经介绍过GitHub Action的相关知识&#xff0c;但这里…

ROS2 通过 命令行 发布速度控制指令 控制 麦克娜姆轮

在 ROS2 中&#xff0c;要通过命令行发布速度控制指令来控制麦克娜姆轮机器人&#xff0c;你需要知道机器人所使用的速度控制话题和消息类型。通常麦克娜姆轮机器人使用geometry_msgs/Twist消息类型来接收速度指令。 以下是通过命令行发布速度控制指令的方法&#xff1a; 首先确…

多层Model更新多层ListView

一、总体架构QML (三层 ListView)└─ C 单例 DataCenter (QQmlContext 注册)├─ L1Model (一级节点)│ └─ 内部持有 QList<L2Model*>│ └─ L2Model (二级节点)│ └─ 内部持有 QList<L3Model*>│ └─ L3Model (三级节…

Git基础操作教程

本文目的是掌握Git基础操作教程一、Git简介Git&#xff1a;分布式版本控制系统&#xff0c;使用仓库(Repository)来记录文件的变化最流行的版本控制系统有两种&#xff1a;集中式&#xff08;SVN&#xff09;、分布式&#xff08;Git&#xff09;二、Git操作1.创建仓库仓库(Rep…