正规矩阵求参数

已知售卖房屋的参数和出售价格,我们去预测其他房屋时

输入图片说明

我们会先假设出一个函数能大致拟合这些数据,比如用线性函数

f(X) = θ1X1 + θ2X2 + θ3X3 + θ4X4

或者用非线性的函数

f(X) = θ1log(X)

代价函数由来

这些假设函数的参数都是未知的,怎么去求它们呢?

如果刚好所有的点都满足 f(x) 函数,对于第一个式子显然只需要代入四个点解方程分别求得 (θ1, θ2, θ3, θ4)。对于第二个式子只需任意代入一个点就可以求得参数 θ1。

但这些点都不完全分布在我们的假设函数上,这样就需要给出一个标准来求得最优参数。这就是代价函数(Cost Function)。代价函数表征的是假设函数与真实数据之间的差距,定义为:

输入图片说明

h 是 假设函数,y代表真实函数的值。

可以得知,当 J 的值越小,假设函数和真实函数就越接近。

梯度下降法求参数

那么已知了代价函数之后,怎么去确定参数呢。只需要把所有的参数值遍历一遍代入代价函数,最后取代价函数值最小的时候对应的参数即可。

这样做效率很低,所以引入了梯度下降法来加速求解过程。

正规方程法求参数

还有另一种方法可以同样求得这些参数。

Normal equation:Method to solve for θ analytically

正规方程公式:

输入图片说明

X = [1 2104 5 1 45
     1 1416 3 2 40
     1 1534 3 2 30
     1 852  2 1 36
     1 3000 4 1 38];
Y = [460 232 315 178 540]';
parament = pinv(X'*X)*X'*Y;
disp(parament)

结果

  247.0282
    0.1112
   68.5539
  -49.3222
   -6.9878

这里求得是 f(X) = θ0X0 + θ1X1 + θ2X2 + θ3X3 + θ4X4 函数的五个参数

若将 X 修改为

X = [1 2104*2104 5 1 45
     1 1416*1416 3 2 40
     1 1534*1534 3 2 30
     1 852*852  2 1 36
     1 3000*3000 4 1 38];
Y = [460 232 315 178 540]';
parament = pinv(X'*X)*X'*Y;
disp(parament)

则求得的是 f(X) = θ0X0 + θ1X1*X1 + θ2X2 + θ3X3 + θ4X4 函数的五个参数

转载于:https://my.oschina.net/lvyi/blog/608155

### 线性回归中的正规方程方法及其推导 在线性回归中,正规方程是一种解析的方法用于找到模型参数的最佳值。这种方法不需要迭代计算,而是通过矩阵运算一次性得到最优解。 假设我们有一个数据集 \(X\) 和目标向量 \(y\),其中 \(X \in \mathbb{R}^{m\times n}\),\(y \in \mathbb{R}^m\),这里 \(m\) 是样本数量,\(n\) 是特征的数量。为了简化计算,在输入矩阵 \(X\) 中加入一列全为 1 的偏置项,表示截距项。此时的目标是最小化损失函数: \[ J(\theta) = \frac{1}{2}(X\theta - y)^T(X\theta - y), \] 其中 \(\theta\) 表示待优化的权重向量[^1]。 #### 寻找最小化的条件 要使上述代价函数达到最小值,可以通过对其导并令其等于零的方式实现。具体来说,我们需要对 \(J(\theta)\) 关于 \(\theta\) 进行微分,并设置结果为零: \[ \nabla_\theta J(\theta) = X^T (X\theta - y). \] 当我们将这个表达式设为零时,可以得出如下等式: \[ X^TX\theta = X^Ty. \] 如果矩阵 \(X^TX\) 可逆,则可以直接得 \(\theta\) 的闭合形式解决方案: \[ \theta = (X^TX)^{-1}X^Ty, \] 这就是所谓的 **正规方程** 形式。 此公式的优点在于它提供了一种无需循环更新即可获得全局最优解的办法;然而它的缺点也很明显——对于大规模的数据集而言,由于涉及到高维矩阵逆操作,可能会非常耗时甚至不可行[^2]。 ```python import numpy as np def normal_equation(X, y): """ 使用正规方程解决线性回归问题 参数: X -- 输入特征矩阵 (含偏置), shape=(m,n) y -- 输出标签向量, shape=(m,) 返回: theta -- 计算所得的参数向量, shape=(n,) """ # 添加偏置项到X ones_column = np.ones((X.shape[0], 1)) X_b = np.hstack([ones_column, X]) # 应用正规方程公式 theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) return theta_best.flatten() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值