如何计算区域的下边界?

本文介绍了一种使用拉格朗日乘子法计算曲线下边界的数学方法。通过构造优化问题并利用KKT条件求解直线方程参数k和b,最终得到能够拟合数据点的边界直线。

如下图所示,如何计算曲线的下边界?
1421082-20180612163240871-1512699921.png

设输入的数据为 \(\{(x_n, y_n)\}_{n=1}^{N}\), 直线方程为 \(y = k x + b\)。 根据拉格朗日乘子法,求解优化问题

\[ \begin{align} \min_{k, b} \quad & f(k, b) = \sum_{n=1}^{N}{ (y_n - k x_n - b)^2 } \\ \text{s.t.} \quad & y_n \ge k x_n + b, \quad n = 1, \cdots, N \end{align} \]

等价于最小化

\[ \begin{align} \min_{k, b} \quad & g(k, b, \lambda) = \sum_{n=1}^{N}{ [(y_n - k x_n - b)^2 + \lambda_n(k x_n + b - y_n)]} \\ \text{s.t.} \quad & \lambda_n \ge 0, \quad n = 1, \cdots, N \end{align} \]

其最优解满足KKT条件

\[ \begin{align} 2\sum_{n=1}^{N}{(y_n - k x_n - b)x_n} = \sum_{n=1}^{N} {\lambda_n x_n} \\ 2\sum_{n=1}^{N}{(y_n - k x_n - b)} = \sum_{n=1}^{N} {\lambda_n} \\ \lambda_n(y_n - k x_n - b) = 0, \quad n = 1, \cdots, N \\ y_n \ge k x_n + b, \quad n = 1, \cdots, N \\ \lambda_n \ge 0, \quad n = 1, \cdots, N \end{align} \]

其中,关于 \(k\)\(b\) 的方程可以写为
\[ \begin{align} (2\sum_{n=1}^{N}{ x_n ^2}) k + ( 2\sum_{n=1}^{N}{ x_n}) b & = 2\sum_{n=1}^{N}{y_n x_n} - \sum_{n=1}^{N} {\lambda_n x_n} \\ (2\sum_{n=1}^{N}{x_n} ) k + 2Nb & = 2\sum_{n=1}^{N}{y_n} - \sum_{n=1}^{N} {\lambda_n} \end{align} \]

写成矩阵形式
\[ \begin{align} \left[\begin{array}{cc} \sum_{n=1}^{N}{ x_n ^2} & \sum_{n=1}^{N}{ x_n} \\ \sum_{n=1}^{N}{x_n} & N \end{array} \right] \left[ \begin{array}{c} k \\ b \end{array} \right] & = \left[\begin{array}{c} \sum_{n=1}^{N}{y_n x_n} - \frac{1}{2} \sum_{n=1}^{N} {\lambda_n x_n} \\ \sum_{n=1}^{N}{y_n} - \frac{1}{2}\sum_{n=1}^{N} {\lambda_n} \end{array}\right] \end{align} \]

由矩阵的逆运算,可得
\[ \begin{align} \left[\begin{array}{cc} \sum_{n=1}^{N}{ x_n ^2} & \sum_{n=1}^{N}{ x_n} \\ \sum_{n=1}^{N}{x_n} & N \end{array} \right] ^{-1} = \frac{1}{N\sum_{n=1}^{N}{x_n^2} - (\sum_{n=1}^{N}{x_n})^2} \left[\begin{array}{cc} N & - \sum_{n=1}^{N}{ x_n} \\ - \sum_{n=1}^{N}{x_n} & \sum_{n=1}^{N}{ x_n ^2} \end{array} \right] \end{align} \]

于是,有
\[\begin{align} \left[ \begin{array}{c} k \\ b \end{array} \right] & = \frac{1}{N\sum_{n=1}^{N}{x_n^2} - (\sum_{n=1}^{N}{x_n})^2} \left[\begin{array}{c} \sum_{n=1}^{N}{y_n x_n} - \frac{1}{2} \sum_{n=1}^{N} {\lambda_n x_n} \\ \sum_{n=1}^{N}{y_n} - \frac{1}{2}\sum_{n=1}^{N} {\lambda_n} \end{array}\right] \end{align}\]

转载于:https://www.cnblogs.com/archerC/p/9173728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值