机器学习之----线性回归推导

本文介绍线性回归的基本概念,探讨如何使用工资和年龄这两个特征预测银行贷款额度,并深入讨论线性回归模型的参数意义及误差分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

样本

工资年龄额度
40002520000
80003070000
50002835000
75003350000
120004085000

例子

数据:工资和年龄(2个特征)
目标:预测银行会贷款给我多少钱(标签)
考虑:工资和年龄都会影响最终银行贷款的结果那么他们各自有多大的影响呢?

线性回归定义(来自于百度百科

性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w’x+ee为误差服从均值为0的正态分布。

回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析

个人理解:线性回归就是通过样本得出一个数值 例如 通过工资和年龄得出可贷款额度。


推理开始

假设
X1 = 年龄
X2 = 工资
Y = 银行最终会借多少钱给客户
如下图
银行贷款三维坐标图

找到最合适的一条线(想象一个高维–面)来最好的拟合我们的数据点

引入数学公式

假设θ₁是年龄的参数,θ₂是工资的参数。
这里写图片描述
如果θ₁ = 0.1 ,θ₂ = 0.5
hθ(x) = θ + θ₁x₁+θ₂xθ₂ = θ + 0.1*25 + 0.5*4000
参数一旦确定,贷款额度不仅和工资和年龄有关系,贷款额度的上升下降还会会随着偏置项提升下降。

其实θ 的下标是0 ,θx 的x下标是0 且x=1 这样就算是乘以一个1 结果值还是不变。(在实际的工作中,分析数据的时候会额外的增加一个列,这个列里面全部都是1 就是为了如下这个公式)
hθ(x) = θ + θ₁x₁+θ₂xθ₂ = θx + θ₁x₁+θ₂xθ₂
推理出:如下公式
这里写图片描述
T相当于转置
例如 : θ 为 [θ0,θ1,θ2]
转置之后为
[[θ0],
[θ1],
[θ2]
]
转置之后的矩阵乘以X 的矩阵 [x0,x1,x2]
得出的结果为θ0*x0+θ1*x1+θ2*x2
矩阵相乘 得出最后的结果

误差

对于上面的公式可以推出相应的预测值,但是预测值和真实值还是有一定的差异,就是所谓的误差(用ε来表示该误差)。
这里写图片描述
y就是真实值 = θTx 就是预测值 + ε 是误差
这里写图片描述

独立:每个样本都是独立的之间互不影响。
同分布:必然是同一个纬度下的数据。比如同一个银行才有效。
高斯分布:如上图右边就是一个 高斯分布的坐标图。大多数的情况就是不多贷不少贷,在向两边扩展的时候,贷的越多或者越少的情况是概率越来越小。
这里写图片描述
这里写图片描述
似然函数:寻找参数(L(θ)越大越好)似然函数的最大的时候自然(求参数)估计
对数似然:把上面的似然函数编程 (乘法) 编程下面 对数似然 (两边同时加了log)但是 y=logA*B = logA+logB,所以顺利成章,把乘法变成了加法+
这里写图片描述

注:log 和exp抵消
最终结果极大估计
所以如下公式越小越好 ,越接近0越好
这里写图片描述

这里写图片描述

注:转置的应用求和 X平方等于 XT*X

未完。。。

### 关于线性回归的正规方程解 在线性回归问题中,正规方程是一种解析方法,用于直接计算最优参数 \( \theta \),而无需迭代优化。这种方法通过使代价函数 \( J(\theta) \) 的偏导数等于零来获得闭合形式的解决方案。 #### 一、正规方程的核心思想 正规方程的目标是最小化线性回归中的平方误差损失函数 \( J(\theta) \)[^1]。假设输入数据矩阵为 \( X \in \mathbb{R}^{m \times (n+1)} \),其中每一行代表一个训练样本,目标向量为 \( y \in \mathbb{R}^m \),则可以通过以下公式得到最佳参数: \[ \theta = (X^T X)^{-1} X^T y \] 此公式的推导基于对损失函数 \( J(\theta) \) 进行最小化的条件,即令其梯度为零[^2]。 --- #### 二、正规方程的推导过程 以下是正规方程的具体推导步骤: 1. **定义损失函数** 多元线性回归的损失函数通常被定义为: \[ J(\theta) = \frac{1}{2m} \sum_{i=1}^m (\hat{y}^{(i)} - y^{(i)})^2 \] 其中 \( \hat{y}^{(i)} = h_\theta(x^{(i)}) = \theta^T x^{(i)} \) 是预测值,\( y^{(i)} \) 是真实值[^4]。 2. **转换为矩阵形式** 将上述表达式改写成矩阵形式以便简化运算: \[ J(\theta) = \frac{1}{2m} \| X\theta - y \|^2 \] 其中 \( \| a \|^2 = a^T a \) 表示向量 \( a \) 的欧几里得范数平方。 3. **求导并设置为零** 对 \( J(\theta) \) 关于 \( \theta \) 求导,并将其设为零以寻找极小值点: \[ \nabla_\theta J(\theta) = \frac{1}{m} X^T(X\theta - y) = 0 \] 解该方程可得: \[ X^T X \theta = X^T y \] 4. **求解参数 \( \theta \)** 如果 \( X^T X \) 可逆,则可以直接得出: \[ \theta = (X^T X)^{-1} X^T y \][^3] --- #### 三、Python 实现代码 下面是使用 Python 和 NumPy 库实现正规方程的方法: ```python import numpy as np def normal_equation(X, y): """ 使用正规方程法求解线性回归参数 theta 参数: X -- 输入特征矩阵 (形状: m x (n+1)) y -- 输出标签列向量 (形状: m x 1) 返回: theta -- 计算出的最佳参数 (形状: (n+1) x 1) """ # 添加截距项到 X 中 ones_column = np.ones((X.shape[0], 1)) X_b = np.hstack([ones_column, X]) # 计算 theta try: theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) except np.linalg.LinAlgError: raise ValueError("矩阵不可逆,请检查是否存在多重共线性或其他问题") return theta # 测试数据 X = np.array([[1], [2], [3]]) y = np.array([[1], [2], [3]]) theta = normal_equation(X, y) print("Theta:", theta) ``` --- #### 四、注意事项 1. **矩阵不可逆的情况** 若 \( X^T X \) 不可逆,可能是因为特征间存在完全线性依赖关系或者样本数量少于特征数量。此时可通过删除冗余特征或采用正则化技术解决[^2]。 2. **适用范围** 正规方程适用于中小型数据集,因为当特征维度较高时,计算 \( (X^T X)^{-1} \) 的复杂度会显著增加。对于大规模数据集,推荐使用梯度下降等数值优化方法。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值