赞
踩
我们知道在多元线性回归里面,可以使用梯度下降算法来进行迭代,进而求出最合适的参数向量。但是梯度下降有诸多不便,所以可以在一些情况下考虑用正规方程代替梯度下降,我的另一篇文章里有用python实现正规方程。
讲讲梯度下降的不便之处:
1、需要选择学习率α,太大的α会导致接近局部最优点的时候步长过大,无法收敛,来回震荡;太小的α会导致收敛速度很慢。
2、需要进行特征缩放,也就是通过
特
征
−
样
例
集
的
该
特
征
值
均
值
特
征
的
最
大
取
值
−
最
小
取
值
\frac{特征-样例集的该特征值均值}{特征的最大取值-最小取值}
特征的最大取值−最小取值特征−样例集的该特征值均值
的方式进行缩放,不然在一些数据上,会很难收敛。想象一下假如现在假设函数里面有两个参数需要预估,那么他的损失函数应该在第三个维度上,如果我们用等高线图来表示,图线会近似于套圈的圆和椭圆的多个组合。那么圆心处就是我们要到达的局部最优点。如果两个特征的范围差距很大,但是他们的系数(也就是我们要估计的参数)范围若是很接近的话,也就是说我们还是认可范围差较大或者均值较大的特征对结果的影响比较大,但是如果通过调整系数范围来压低特征的量纲影响,就会使得图像近似一个椭圆形,这样我们可能会通过长轴步进更新,大大影响迭代效率。
3、需要多次迭代,正规方程可以一步到位。
但是较之正规方程也有优胜之处:那就是求逆运算的复杂度是O(n3),所以在处理特征规模超过10000的时候,还是比较多考虑梯度下降;并且梯度下降也适用于更复杂的一些非线性模型,而正规方程大概率不可以。
从常理的角度看,我们希望选定的参数能满足如下条件:
h
θ
(
x
)
=
y
h_\theta(x)=y
hθ(x)=y
而:
h
θ
(
x
)
=
x
θ
,
其
中
x
是
样
例
条
数
∗
特
征
数
维
度
的
特
征
矩
阵
,
θ
是
特
征
维
数
∗
1
的
参
数
向
量
h_\theta(x)=x\theta,其中x是样例条数*特征数维度的特征矩阵,\theta是特征维数*1的参数向量
hθ(x)=xθ,其中x是样例条数∗特征数维度的特征矩阵,θ是特征维数∗1的参数向量
所以我们可以通过线性代数知识知道,如果x存在逆矩阵,那么 θ = x − 1 y \theta=x^{-1}y θ=x−1y,但是我们知道x
不一样有逆矩阵,所以我们可以通过和x的转置做运算得到
x
T
x
θ
=
x
T
y
x^Tx\theta=x^Ty
xTxθ=xTy,因此,
θ
=
(
x
T
x
)
−
1
x
T
y
\theta=(x^Tx)^{-1}x^Ty
θ=(xTx)−1xTy.
从数学逻辑上看,这个θ的值是希望取到损失函数局部最优的情况。也就是说对损失函数求导,通过损失函数等于0来确定θ的合适取值。
那么
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x i ) − y i ) 2 J(\theta)=\frac{1}{2m}\sum^{m}_{i=1}{(h_\theta(x^i)-y^i)^2} J(θ)=2m1∑i=1m(hθ(xi)−yi)2
J ( θ ) = 1 m ( ( h θ ( x ) − y ) T ∗ ( h θ ( x ) − y ) ) \displaystyle {{J(\theta)}}=\frac{1}{m}((h_\theta(x)-y)^T*(h_\theta(x)-y)) J(θ)=m1((hθ(x)−y)T∗(hθ(x)−y))
解释一下,首先损失函数前面的常数项系数并没有定死,因为我们从梯度下降的时候也可以看到,他无伤大雅,至于前面有个二分之一的系数,也是为了求导的时候平方项系数下来刚好能抵消掉。至于前面的m分之一,是因为这就是方差的定义。
x T x = ∣ x ∣ 2 x^Tx=|x|^2 xTx=∣x∣2这个应该不用多说,线性代数知识想想就好。
d J ( θ ) d θ = x T ( x θ − y ) = 0 \displaystyle \frac {dJ(\theta)}{d\theta}=x^T(x\theta-y)=0 dθdJ(θ)=xT(xθ−y)=0
同理也可得上面的结论 θ = ( x T x ) − 1 x T y \theta=(x^Tx)^{-1}x^Ty θ=(xTx)−1xTy.
这里讲一个很有趣的结论,A+kE,E是单位矩阵,是一定可逆的。我们只要让k取的很小,对原矩阵的干扰就会很小,但必须k必须大于0.这样做是有效的,你会在学习正则化的时候看到类似的内容
上面我们凑出 X T X X^TX XTX是为了满足可逆性的第一个必要条件:也就是最起码这个矩阵是一个方阵。但是在线性代数里面还有许多充分必要条件,比如矩阵必须满秩,也就是说通过初等行变换不能化简出一行元素全为0的矩阵(或者说取行列式的值不可以为0)。
那如果碰到 X T X X^TX XTX也不可逆的情况应该怎么办?
下面引入一个概念:伪逆
我们知道逆矩阵需要满足 A − 1 A = E , 也 就 有 A A − 1 A = E A = A A^{-1}A=E,也就有AA^{-1}A=EA=A A−1A=E,也就有AA−1A=EA=A
如果存在一个矩阵X,他满足 A X A = A , X A X = X AXA=A,XAX=X AXA=A,XAX=X,此时我们称X为A的伪逆矩阵。
下面需要引入很多概念:
酉空间(一种特殊的复线性空间):指以一类埃尔米特函数作点积的复线性空间。
共轭转置:设矩阵A中的任一元素属于复数域C,A是m*n阶矩阵,用 A ‾ \overline{A} A表示以A的元素的共轭复数为元素组成的矩阵,再对 A ‾ \overline{A} A做转置,得到AH,那么我们就把AH称作A的共轭转置。实矩阵的共轭转置就是转置
复数矩阵:元素中含有复数的矩阵
酉矩阵:若有一复数矩阵U,U是方阵,满足 U + U = U U + = E , U + 为 U 的 共 轭 转 置 U^+U=UU^+=E,U^+为U的共轭转置 U+U=UU+=E,U+为U的共轭转置,则称U为酉矩阵。也就是说,矩阵U是酉矩阵当且仅当他的共轭转置为他的逆矩阵。
埃尔米特函数: f ( − x 1 , − x 2 ) = f ( x 1 , x 2 ) ‾ f(-x_1,-x_2)=\overline{f(x_1,x_2)} f(−x1,−x2)=f(x1,x2),横线表示复共轭(实部相同,虚部相反)。
半正定矩阵:如果二次型 X T A X ≥ 0 , X 是 任 意 非 0 实 向 量 X^TAX≥0,X是任意非0实向量 XTAX≥0,X是任意非0实向量,那么称A为半正定矩阵。
正交:垂直的推广,若两向量点积是0,则称之为正交。
正交矩阵:如果 A A T = E 或 者 A T A = E AA^T=E或者A^TA=E AAT=E或者ATA=E,那么A就是正交矩阵,且A具有以下特点:AT的各行是单位向量且两两正交,AT的各列是单位向量且两两正交。
奇异值:设A为m*n阶矩阵,q=min(m,n)(特征值是方阵才有的,奇异值是矩阵就有), A H A A^HA AHA的q个特征值的算术平方根叫做A的奇异值。
奇异值分解:假设M是一个m×n阶矩阵,其中的元素全部属于域 K,也就是实数域或复数域。如此则存在一个分解使得 M = U Σ V H M=U\Sigma V^H M=UΣVH,其中U是m*m阶酉矩阵;Σ是半正定m×n阶对角矩阵;而VH,即V的共轭转置,是n×n阶酉矩阵。(正交矩阵是一种特殊的酉矩阵)这样的分解就称作M的奇异值分解。Σ对角线上的元素Σi,其中Σi即为M的奇异值。
常见的做法是为了奇异值由大而小排列。如此Σ便能由M唯一确定了。(虽然U和V仍然不能确定)
零空间:是一个向量空间,指的是 { x ∣ A x = 0 } \{x|Ax=0\} {x∣Ax=0}的x集合,存在零空间的矩阵就不可逆,因为存在至少一组非0解可以使得A的各列的线性组合是相关的,也就不满秩了。(所以列满秩矩阵的零空间肯定只有零向量,但是可以有左逆矩阵(因为这个跟行有关))
左零空间: { x ∣ A T x = 0 } \{x|A^Tx=0\} {x∣ATx=0},行满秩矩阵的左零空间只有零向量,有右逆矩阵。
对于秩亏损的矩阵来说,两个空间都存在,左右逆都不存在。
行空间:若A是一m*n向量,由A的行向量张成(线性组合)的 R 1 ∗ n R^{1*n} R1∗n
的子空间称为的行空间,比如:
A
=
[
1
0
0
0
1
0
]
A=\left[
A的行空间是所有如下形式的三元组
α
(
1
,
0
,
0
)
+
β
(
0
,
1
,
0
)
=
(
α
,
β
,
0
)
\alpha(1,0,0)+\beta(0,1,0)=(\alpha,\beta,0)
α(1,0,0)+β(0,1,0)=(α,β,0)
列空间类似。
伪逆矩阵求法:
A 为m*n矩阵,r代表矩阵的秩:
若矩阵A是方阵,且|A|!=0,则存在AA-1=E;
若A不是方阵,或者|A|=0,那么只能求A的伪逆,所谓伪逆是通过SVD(奇异值分解)计算出来的;
pinv(A)表示A是伪逆:
(超定方程组:方程式个数多于未知量个数,在机器学习里大概就是样例数多于特征数)
(非齐次方程组( A x = β , A 是 m ∗ n 阶 矩 阵 Ax = \beta,A是m*n阶矩阵 Ax=β,A是m∗n阶矩阵 )解的个数:1、无解, r ( A ) < r ( A ∣ β ) r(A)<r(A|\beta) r(A)<r(A∣β)这个无解的原因非常直观,因为增广了 β \beta β向量之后,矩阵的秩增加了,说明出现了一行 0 x i 1 + . . . 0 x i j + . . . 0 x i n = β i 0x_{i1}+...0x_{ij}+...0x_{in}=\beta_i 0xi1+...0xij+...0xin=βi的情况,显然是无解的;2、有唯一解, r ( A ) = r ( A ∣ β ) = n r(A)=r(A|\beta)=n r(A)=r(A∣β)=n,这种情况就是说满秩的且增广之后不影响秩的情况。3、无穷多组解, r ( A ) = r ( A ∣ β ) < n r(A)=r(A|\beta)<n r(A)=r(A∣β)<n
如果A列满秩,列向量线性无关,(如果列向量有关的话,就存在一些特征的系数全是0,也就是说根本不对输出产生影响),r=n,Ax=b为超定方程组,存在0个或1个解,那么 p i n v ( A ) = ( A T A ) − 1 A T pinv(A)=(A^TA)^{-1}A^T pinv(A)=(ATA)−1AT,因为 ( A T A ) − 1 A T A = E (A^TA)^{-1}A^TA=E (ATA)−1ATA=E,因此也称为左逆;
如果A行满秩,行向量线性无关(每条smaple都是有效的),Ax=b为欠定方程组(方程组个数少于未知量个数),存在0个或无穷个解(因为方程数少于未知量数目),那么 p i n v ( A ) = A T ( A A T ) − 1 pinv(A)=A^T(AA^T)^{-1} pinv(A)=AT(AAT)−1(其实就是上面的转置),因为 A A T ( A A T ) − 1 = E AA^T(AA^T)^{-1}=E AAT(AAT)−1=E,因此也称为右逆;
如果秩亏损(即rank(A)<m且rank(A)<n),那么只好先做奇异值分解。
先求得 A A H AA^H AAH的特征值,得到对应的奇异值和奇异值矩阵 Σ \Sigma Σ(奇异值从小到大排布的对角矩阵),接下来根据特征方程求 A A H AA^H AAH的特征向量,把特征向量标准化后,放在一个矩阵中,就得到U.
用同样的方法求 A H A A^HA AHA的特征值和特征向量,进而求得V
你可以验证一下 A = U Σ V H A=U\Sigma V^H A=UΣVH
那么回到一开始的伪逆定义,就得到了pinv(A)
p i n v ( A ) = V Σ + U H , 这 里 的 Σ + 是 Σ 矩 阵 所 有 元 素 的 倒 数 的 组 合 pinv(A)=V\Sigma^+U^H ,这里的\Sigma^+是\Sigma矩阵所有元素的倒数的组合 pinv(A)=VΣ+UH,这里的Σ+是Σ矩阵所有元素的倒数的组合
https://www.cnblogs.com/bigmonkey/p/12070331.html
顺带一提,这个链接下有这个做法的例题,和伪逆的一些更数学角度的解释,不过错漏挺多,比如他的V忘了标准化,再比如他对于逆变换空间那一段,好像把行列全弄反了,x如果是行向量,怎么能和A做变换映射到列向量Ax上(因为A是mxn的x如果是1x?维的向量甚至不能相乘)…但是看看无妨。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。