模型和代价函数

1.模型的概念:

什么是模型,我们可能对模型有些认知,但是又似乎不能一下子说上来,模型就可以简单的理解为是一个函数,监督学习中数据分为训练集和测试集,训练集相当于历史的真实数据,测试集相当于需要预测的数据。而模型就是根据训练集得出的一个函数表达式,将这个模型带入测试集中就可以预测数据了。

2.学习过程(模型的表示):

在这里插入图片描述
上图就是一个机器学习的过程首先会将训练集(Training set)带入到机器学习算法(Learning algorithm)中去,得到一个估计函数(h)也就是我们所说的模型,然后将测试集(x)的数据带入到这个模型中去,根据这个模型再得出新的估计值(predicted y)。

3.代价函数:

代价函数简单的说就是由预测值与真实值之间的差距构成的函数叫代价函数,也称作损失函数。

我们可以用代价函数来衡量假设函数的准确性。它取所有假设结果的平均值(实际上是一个更漂亮的平均值)加上x的输入和y的实际输出,表达式如下:

在这里插入图片描述

举个例子:根据之前的讲述我们知道在机器学习过程中根据训练集会生成一个模型供测试集使用,这个模型也被称做假设函数hθ​(x),而我们评估这个模型的好坏就需要一个代价函数J(θ1​) ,现在假设有这样一个训练集数据(二维坐标):

{(1,1),(2,2),(3,3)}

这里我们将使用最简单的假设函数(模型)形式 hθ​(x) =θ * X (当然你也可以用二元函数,n元n次函数,我只是为了让大家更简单明了的了解代价函数这个概念,在实际中的模型是非常复杂的。)假设模型只能在上面这个函数形式中选择。这时我们只需要确定θ一个变量的值,就可以确定这个模型。假设我们将θ的值定为1,也就是说假设函数(模型)表达式为 Y=X,这个表达式十分的简洁明了,此时我们画出假设函数(模型)和代价函数的图,如下图所示:

图片

hθ​(x)是假设函数(模型),由上图可以得出我们的训练集中的所有元素(只有3个元素)完美的落在假设函数hθ​(x)上,这应该是一个比较好的模型,此时我们的代价函数J(θ1​)的坐标轴的横轴θ1 = 1 的位置上的纵坐标值为0。此时有人会问,这个点的值为啥是0,这是如何得到的呢?还记得我们上面代价函数的公式吗?没错就是这个
在这里插入图片描述
图一
在这里插入图片描述
图二

图一看不懂,没有关系,看图二,图二是我们高中学过的方差公式,图二中第一个式子是定义式,是不是和图一超级像。如果图二第一个式子也看不懂的话我们可以看看它的展开式,图一和图二是类似的。

好了,我们现在知道了代价函数,该说说上面的坐标轴数据是怎样出来的,首先看假设函数,hθ​(x)上用绿圈圈起来的×号就是我们的训练数据集,而那条直线就是我们的假设函数Y=X(θ = 1时),此时将假设函数带入到代价函数中的hθ​(Xi)变量中,将训练集的y轴坐标集带入到Yi中。计算后将得到一个数,这个数就是代价函数θ1 = 1 时,Y轴的坐标。(1,0)。

我们将假设函数 hθ​(x) =θ * X 中的θ改为0.5。将得到代价函数上另外一个点。如下图所示

图片

得出的结果大约等于0.58。我们将这个点添加到代价函数图中(蓝点),以此类推,我们将会得到一个函数图(如下图所示),这就是一个代价函数。当θ1 = 1的时候,它的拟合度最高,模型也就最好的。
在这里插入图片描述

4.过拟合与欠拟合:

在机器学习中,我们希望的是模型能在新样本上表现的更好一点,为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判断,然而当学习器把训练样本学的"太好"了的时候,很可能已经把训练样本自身的一些特点当成了潜在样本都会具有的一般性质,这样就会导致泛化(一般化)性能下降。这种现象在机器学习中称为“过拟合”。与过拟合相对的是“欠拟合”,这是指对训练样本的一般性质尚未学好。区别如下图所示:

图片

参考:吴恩达老师机器学习课程
参考:《机器学习》周志华

### 模型预测控制中代价函数的设计与使用 模型预测控制(Model Predictive Control, MPC)是一种基于模型的优化控制方法,其核心思想是通过在线求解一个有限时间范围内的优化问题来生成控制输入。在MPC中,代价函数的设计至关重要,因为它直接影响控制性能、系统稳定性以及对约束条件的满足程度。 #### 1. 代价函数的基本结构 MPC中的代价函数通常由三部分组成:状态跟踪误差项、控制输入项终端成本项。 - **状态跟踪误差项**:衡量系统状态偏离期望轨迹的程度。通常表示为: \[ J_x = \sum_{k=0}^{N-1} \|x(k) - x_{\text{ref}}(k)\|_Q^2 \] 其中 \(x(k)\) 是系统的当前状态,\(x_{\text{ref}}(k)\) 是参考轨迹,\(Q\) 是权重矩阵[^1]。 - **控制输入项**:限制控制输入的变化幅度,避免剧烈动作。表达式为: \[ J_u = \sum_{k=0}^{N-1} \|u(k)\|_R^2 \] 其中 \(u(k)\) 是控制输入,\(R\) 是对应的权重矩阵[^2]。 - **终端成本项**:用于增强系统的渐近稳定性,形式为: \[ J_f = \|x(N) - x_{\text{ref}}(N)\|_P^2 \] 其中 \(P\) 是终端权重矩阵,通常通过李雅普诺夫方程确定[^3]。 #### 2. 权重矩阵的选择 权重矩阵 \(Q\)、\(R\) \(P\) 的选择直接影响控制性能。一般原则如下: - **\(Q\) 矩阵**:较大的 \(Q\) 值会更严格地跟踪参考轨迹,但可能导致控制输入频繁变化。 - **\(R\) 矩阵**:较大的 \(R\) 值会抑制控制输入的变化,从而减少能量消耗或机械磨损。 - **\(P\) 矩阵**:需满足正定性条件,确保系统的渐近稳定性。 #### 3. 实现中的注意事项 在实际应用中,代价函数的设计还需考虑以下因素: - **约束处理**:MPC天然支持硬约束,但在某些情况下,可以通过引入松弛变量将硬约束转化为软约束,以提高鲁棒性。 - **计算效率**:代价函数的复杂度会影响优化求解的速度,因此需要在性能计算资源之间进行权衡。 - **动态加权**:对于非线性系统,可以采用动态调整权重的方法,使代价函数适应不同的工作点[^4]。 #### 示例代码 以下是一个简单的MPC代价函数实现示例: ```python import numpy as np def cost_function(x, u, x_ref, Q, R, P, N): """ 计算MPC的代价函数值。 :param x: 当前状态序列 (N+1, n_x) :param u: 控制输入序列 (N, n_u) :param x_ref: 参考轨迹 (N+1, n_x) :param Q: 状态权重矩阵 (n_x, n_x) :param R: 输入权重矩阵 (n_u, n_u) :param P: 终端权重矩阵 (n_x, n_x) :param N: 预测时域长度 :return: 代价函数值 """ cost = 0 for k in range(N): cost += (x[k] - x_ref[k]).T @ Q @ (x[k] - x_ref[k]) + u[k].T @ R @ u[k] cost += (x[N] - x_ref[N]).T @ P @ (x[N] - x_ref[N]) return cost ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BigCabbageFy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值