学习最小二乘法

 整理下方便以后查阅:

最小二乘法是一种数学优化技术,利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差平方和为最小。最小二乘法还可以用于曲线拟合,其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。  推荐博客:http://blog.youkuaiyun.com/v_july_v/article/details/8308762

概念:

何谓最小二乘法?实践中,常需寻找两变量之间的函数关系,比如测定一个刀具的磨损速度,也就是说,随着使用刀具的次数越多,刀具本身的厚度会逐渐减少,故刀具厚度与使用时间将成线性关系,假设符合f(t)=at + b(t代表时间,f(t)代表刀具本身厚度),a,b是待确定的常数,那么a、b如何确定呢?

    最理想的情形就是选取这样的a、b,能使直线y = at + b 所得到的值与实际中测量到的刀具厚度完全符合,但实际上这是不可能的,因为误差总是存在难以避免的。故因误差的存在,使得理论值与真实值存在偏差,为使偏差最小通过偏差的平方和最小确定系数a、b,从而确定两变量之间的函数关系f(t)= at + b。
    这种通过偏差的平方和为最小的条件来确定常数a、b的方法,即为最小二乘法。最小二乘法的一般形式可表述为:
    在此,说点后话,最小二乘法是与统计学有着密切联系的,因为观测值有随机误差,所以它同正态分布一样与误差论有着密切联系( 说实话,最小二乘法试图解决的是误差最小的问题,而正态分布则是试图寻找误差分布规律的问题,无论是最小二乘法,还是正态分布的研究工作,至始至终都围绕着误差进行)。
 
 原理:
在我们研究两个 变量(x,y)之间的相互关系时,通常可以得到一系列成对的数据(x1,y1.x2,y2... xm,ym);将这些数据描绘在x -y直角坐标系中,若发现这些点在一条直线附近,可以令这条 直线方程如(式1-1)。
(式1-1)
其中:a0、a1 是任意实数
为建立这直线方程就要确定a0和a1,应用《最小二乘法原理》,将实测值Yi与利用(式1-1)计算值(Yj=a0+a1X)的离差(Yi-Yj)的平方和
最小为“优化判据”。
令:φ =
(式1-2)
把(式1-1)代入(式1-2)中得:
φ =
(式1-3)
最小时,可用函数 φ 对a0、a1求偏导数,令这两个 偏导数等于零。
∑2(a0 + a1*Xi - Yi)(式1-4)
∑2*Xi(a0 + a1*Xi - Yi)(式1-5)
亦即:
na0 + (∑Xi ) a1 = ∑Yi (式1-6)
(∑Xi ) a0 + (∑Xi^2 ) a1 = ∑(Xi*Yi) (式1-7)
得到的两个关于a0、 a1为未知数的两个方程组,解这两个方程组得出:
a0 = (∑Yi) / n - a1(∑Xi) / n (式1-8)
a1 = [n∑Xi Yi - (∑Xi ∑Yi)] / [n∑Xi2 - (∑Xi)2 )] (式1-9)
这时把a0、a1代入(式1-1)中, 此时的(式1-1)就是我们回归的元线性方程即:数学模型。

 

### 最小二乘法的原理 最小二乘法的核心目标是最小化预测与实际之间的误差平方。通过定义误差函数 \( E(x) = (Ax - b)^T(Ax - b) \)[^2],可以将其展开并简化为二次型的形式: \[ E(x) = x^TA^TAx - 2b^TAx + b^Tb \] 为了使误差达到最小,需对 \( E(x) \) 关于 \( x \) 进行偏导数计算,并令其等于零。最终得到正规方程(Normal Equation): \[ A^TAx = A^Tb \] 解此方程即可获得最优参数向量 \( x \): \[ x = (A^TA)^{-1}A^Tb \][^1] --- ### Python 实现代码示例 以下是基于上述理论推导的一个简单实现,用于解决线性回归问题。 ```python import numpy as np def least_squares(X, y): """ 使用最小二乘法求解线性回归问题 参数: X: 输入特征矩阵 (n_samples, n_features) y: 输出标签向量 (n_samples,) 返回: w: 权重系数向量 (n_features,) """ # 添加偏置项列 ones_column = np.ones((X.shape[0], 1)) X_b = np.hstack([ones_column, X]) # 计算权重w w = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) return w # 示例数据 X = np.array([[1], [2], [3]]) y = np.array([1.5, 3.8, 6.7]) # 调用函数 weights = least_squares(X, y) print(f"计算得到的权重向量: {weights}") ``` 该代码实现了最小二乘法的核心部分,其中 `np.linalg.inv` 函数用于求逆矩阵,而 `.dot()` 方法则完成矩阵相乘操作[^1]。 --- ### 应用场景分析 最小二乘法广泛应用于机器学习中的监督学习任务,特别是在线性回归模型中。它的优点在于解析解的存在以及较低的时间复杂度,在样本数量较少的情况下表现尤为突出。然而需要注意的是,当输入矩阵 \( A \) 的维度较高或者存在多重共线性时,\( A^TA \) 可能接近奇异矩阵,此时需要引入正则化技术如岭回归或 Lasso 回归来改善数稳定性[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值