最小二乘公式
其中,
B:n×1 矩阵
X:m×n 矩阵,输入变量/特征
Y:m×1 矩阵,输出变量/目标变量
m: 样本数
n: 特征个数
推导:
given:XB=Y
→XTXB=XTY
→B=(XTX)−1XTY
为什么 XB=Y 不直接得出 B=X−1Y ?
答:因为X为m×n的矩阵,是不存在逆矩阵的。Tips:
如果一个矩阵不是方阵,是不存在逆矩阵的 如果对其求逆,就是求它的伪逆
比如一个2×3的矩阵,它的伪逆矩阵就是一个3×2的矩阵,两者相乘之后得到2×2的单位矩阵
条件:
矩阵X必须是列满秩矩阵,否则
XTX
的逆就不会存在。
若A为m×n的矩阵,b为m×1的矩阵,则Ax=b表达了一个线性方程组,它的 正规方程组 (normal equation)的形式为 ATAx=ATb 。
当Ax=b有解时(即矩阵[A|b]的秩与A的秩相同),Ax=b与 ATAx=ATb 的解集是一样。
而当Ax=b无解时, ATAx=ATb 仍然有解,其解集即 最小二乘解 (least squares solution),即使得 (Ax−b)T(Ax−b) 的值最小的解,可以理解为使方程组Ax=b近似成立且误差最小的解。
最小二乘法和梯度下降法
相同点:
1 、本质相同:两种方法都是在给定已知数据(因变量 & 自变量)的前提下对因变量算出出一个一般性的估值函数。然后对给定的新的自变量用估值函数对其因变量进行估算。
2、 目标相同:都是在已知数据的框架内,使得估算值与实际值的差的平方和尽量更小(事实上未必一定要使用平方),估算值与实际值的差的平方和的公式为:
其中,hθ(x)=∑ni=0θixi=θTX 为预测函数, θ=[θ0,θ1,...θn]T,X=[x0,x1,...xn]T ,m为样本数,n为特征个数。
不同点:
1、实现方法和结果不同:
- 最小二乘法 是直接对error求导找出全局最小,是 非迭代法 。
-
梯度下降法
是一种
迭代法
,有一个学习的过程,先由给定参数计算一个error,然后向该error下降最快的方向调整参数值,在若干次迭代之后找到局部最小。
梯度下降法的缺点是到最小点的时候收敛速度变慢,并且对初始点的选择极为敏感,其改进大多是在这两方面下功夫。
参考:
遇到的问题:
TypeError: No loop matching the specified signature and casting was found for ufunc solve1
【原因】:
矩阵运算前没有统一数据类型
【解决】:
X = X.astype(float)
参考:
性质
- 可逆矩阵的秩等于阶数
- 可逆矩阵为满秩矩阵
- 奇异矩阵为降秩矩阵
- 当矩阵A的行列式|A|不等于0时,才存在可逆矩阵
计算可逆矩阵报错
- 检查矩阵是否可逆(行列式的值不为0或者为满秩矩阵)
from numpy.linalg import det, inv, matrix_rank
from scipy import ndim
ndim(A) # ndim():数组的维度
det(A) # det():行列式
matrix_rank(A) # matrix_rank():矩阵的秩
inv(A) # inv():矩阵的逆