线性代数基本公式结论简要总结(5)

本文总结对称矩阵、二次型和奇异值分解等内容。

由于对称矩阵具有许多良好的性质,工程上被广泛应用。二次型和奇异值分解也是由对称矩阵具有的特殊性质推广得到的

首先不要忘了之前讲特征值时提到的对角化公式:
A=PDP1 A = P D P − 1
A具有n个线性无关的特征值,P的列空间由A的特征向量构成,D是对角线元素为A的特征值的对角矩阵

若A为对称矩阵,则其不同特征空间中(一个特征值对应的所有特征向量构成的子空间)的任意两个向量正交,即P为正交矩阵

一个方阵A可正交对角化的充要条件:A是对称矩阵

对称矩阵的谱定理:
矩阵A的特征值的集合称为A的谱。若A为n*n对称矩阵,有:
1.A有n个实数特征值(包括重复的特征值)
2.对每一个特征值,对应的特征子空间的维数等于 λ λ 作为特征方程的根的重数
3.特征空间相互正交
4.A可正交对角化

因此对于对称矩阵,有一下有趣形式的谱分解:
A=PDPT=[λ1u1...λnun][uT1...uTn]T A = P D P T = [ λ 1 u 1 . . . λ n u n ] [ u 1 T . . . u n T ] T
A=λ1u1uT1+...+λnunuTn A = λ 1 u 1 u 1 T + . . . + λ n u n u n T
即A可分解为由A的特征值作为权重的各个小部分,显然,对于 λ λ 值较小的部分,可以适当忽略,只留下一些较大特征值的加权和,而不影响原矩阵整体的特征表达

二次型:
Rn R n 上的一个二次型是一个定义在 Rn R n 上的函数,它在向量x处的值可以由表达式 Q(x)=xTAx Q ( x ) = x T A x 计算,此处A是一个n阶对称矩阵,且矩阵A成为关于二次型的矩阵

可以看到,如果矩阵A是对角矩阵,则多项式Q(x)没有交叉项,否则有交叉项。这时我们想要通过适当的变量代换消去所有的交叉项

二次型的变量代换:
如果x表示 Rn R n 中的向量变量,则变量代换是如下形式的等式:
x=Py x = P y y=P1x y = P − 1 x
其中P是可逆矩阵且y是 Rn R n 中的一个新变量,P的列可以确定 Rn R n 的一个基,y是相对于该基向量x的坐标向量。将上述等式带入原式,有:
xTAx=yT(PTAP)y x T A x = y T ( P T A P ) y
从而新的二次型矩阵为 PTAP P T A P ,由于A是对称矩阵,因此存在正交矩阵P,使得 PTAP P T A P 为对角矩阵D(对角元素为A的特征值):
xTAx=yTDy x T A x = y T D y
这样一来,就消除了原来多项式中的交叉项

上述去除交叉项的变换中,矩阵P的列称为二次型 xTAx x T A x 主轴,向量y是向量x在由这些主轴构造的 Rn R n 空间的单位正交基下的坐标向量

主轴的几何意义:
不失一般性,考虑矩阵A为2阶对称方阵,c为常数,则所有对应下式的x的集合,对应一个椭圆或圆、双曲线、两条相交直线或单个点、或为空集:
xTAx=c x T A x = c
xTAx=yTDy x T A x = y T D y 的变换相当于是对曲线做了旋转,即旋转了原始的水平和竖直坐标轴

二次型的分类:
def:一个二次型Q是:
1.正定的:对所有非零x,有Q(x)>0
2.负定的:对所有非零x,有Q(x)<0
3.不定的:Q(x)正负值均存在

A为n阶矩阵,则二次型对应特征值有:
1.正定:当且仅当A的所有特征值均为正数
2.负定:当且仅当A的所有特征值均为负数
3.不定:当且仅当A既有正特征值,又有负特征值

相应的矩阵分为:正定矩阵、负定矩阵、不定矩阵

奇异值分解:
考虑到并不是所有矩阵都能对角化分解为: A=PDP1 A = P D P − 1 ,但是,所有矩阵都可以分解为如下形式,也就是奇异值分解:
A=QDP1 A = Q D P − 1
其中D是”对角矩阵“。它是线性代数中最有用的矩阵分解

一个mn矩阵的奇异值
设A是mn矩阵,则 ATA A T A 是对称矩阵且可以正交对角化,令{ v1,...vn v 1 , . . . v n }为 Rn R n 单位正交基且构成 ATA A T A 的特征向量,{ λ1...λn λ 1 . . . λ n }是 AAT A A T 对应的特征值,则有:

||Avi||2=(Avi)TAvi=vTiATAvi=vTi(λivi)=λi | | A v i | | 2 = ( A v i ) T A v i = v i T A T A v i = v i T ( λ i v i ) = λ i

可见 ATA A T A 的所有特征值均非负,不妨将其从大到小排序。则A的奇异值为 ATA A T A 的特征值的平方根,记为 σ1,...,σn σ 1 , . . . , σ n ,且按递减顺序排列,因此A的奇异值即为向量 Av1,Av2,...Avn A v 1 , A v 2 , . . . A v n 的长度

在数值计算中,A的秩往往对A中元素的微小变化很敏感,为此在计算矩阵的时,通常采用计算非零奇异值的个数的方法得到秩的值

SVD分解:
矩阵A的分解涉及一个m*n的“对角矩阵”Σ,形式如下:
Σ= Σ =

几何意义:
我们知道,一个向量被一个对角矩阵左乘,相当于在原空间中做了水平和竖直两方向的拉伸,被一个对称矩阵左乘,相当于在原空间中先做了绕原点的旋转,然后再做了沿两个坐标轴的拉伸。而被一个mn矩阵左乘,则会使空间维度发生改变,相当于对向量做了高维或低维的投影,然后在做旋转或拉伸变换

在SVD分解公式中,矩阵∑起到改变空间维度的作用, U U VT起到在新的空间中旋转并拉伸的作用

协方差矩阵:

主成分分析(PCA):

<think>嗯,用户问的是给定数据集D={(-1,0),(0,0),(1,1)},用最小二乘法学习得到的线性模型的斜率是多少,并且要用代码解决。首先,我需要回忆一下最小二乘法的原理和应用步骤。 首先,用户可能刚接触线性回归或者正在学习机器学习基础,需要解决一个简单的最小二乘问题。给定的数据集有三个点,分别是(-1,0)(0,0)(1,1)。用户想知道用最小二乘法拟合后的直线斜率。这个问题看起来是典型的线性回归问题,适合用最小二乘法求解。 接下来,我需要确认最小二乘法的数学推导是否正确。线性模型通常是y = wx + b,其中w是斜率,b是截距。对于最小二乘法,我们需要最小化预测值和真实值之间的平方误差之和。为了找到最优的w和b,通常需要解正规方程或者使用矩阵方法。 不过,用户可能只需要斜率w,所以是否可以不计算截距b?或者是否数据已经中心化?比如,数据点中的x值是否对称,可能会有助于简化计算。比如,给定的x值为-1, 0, 1,平均数是0,所以可能截距b就是y的平均数?因为当x均值为0时,截距b等于y的均值。这时候,斜率的计算可能会更简单,只需要计算协方差除以方差。 不过,这里可能需要更仔细地计算。先计算x和y的均值。x的平均值是(-1 + 0 + 1)/3 = 0。y的平均值是(0 + 0 + 1)/3 = 1/3 ≈ 0.333。接下来,计算协方差和方差。协方差是各个点(x_i - x_mean)(y_i - y_mean)的和,除以n-1或者n,这里样本量小,可能需要用n。而方差则是(x_i - x_mean)^2的和除以n。或者,正规方程中,斜率w的计算公式是sum((x_i - x_mean)(y_i - y_mean)) / sum((x_i - x_mean)^2)。 这里,我需要验证公式是否正确。根据最小二乘法的正规方程,当模型是y = wx + b时,最优的w和b可以通过以下公式计算: w = [n*sum(xy) - sum(x)sum(y)] / [n*sum() - (sum(x))²] b = [sum(y) - w*sum(x)] / n 不过,当x的均值是0时,计算会更简单。比如,这里的sum(x)是0,所以公式可以简化。在这种情况下,sum(x) = -1 + 0 +1 = 0,sum(y) = 0+0+1=1。sum(xy) = (-1*0)+(0*0)+(1*1)=1。sum() = (-1)^2 +0^2 +1^2=2。n=3。 代入公式,w的分子是3*1 -0*1=3,分母是3*2 -0^2=6,所以w=3/6=0.5。那斜率应该是0.5。这个时候截距b可以用[sum(y) -w*sum(x)]/n = [1 -0.5*0]/3=1/3≈0.333。所以线性模型是y=0.5x + 1/3。这时候用户的问题只问斜率,所以答案是0.5。但可能需要用代码来验证这个过程是否正确。 用户可能希望看到代码的实现,比如用Python的numpy库来计算,或者手动实现。比如,可以用numpy的polyfit函数,或者手动计算。例如,使用numpy.linalg.lstsq来解线性方程组。 现在考虑代码的实现。首先,将数据点转化为数组形式。x的数组是[-1,0,1],y的数组是[0,0,1]。然后,构建矩阵X,其中第一列是x,第二列是1,用于截距项。然后使用numpy.linalg.lstsq来求解系数。结果应该返回w和b,其中w是斜率,b是截距。或者,使用polyfit函数,设置阶数为1,返回的系数数组中的第一个元素是斜率,第二个是截距。 例如,使用numpy的代码可能如下: import numpy as np X = np.array([-1, 0, 1]).reshape(-1, 1) y = np.array([0, 0, 1]) model = np.polyfit(X.flatten(), y, 1) slope = model[0] print(slope) # 应该输出0.5 或者用线性代数方法: X_matrix = np.c_[X, np.ones(3)] # 添加一列1作为截距项 coefficients, residuals, rank, singular_values = np.linalg.lstsq(X_matrix, y, rcond=None) slope = coefficients[0] print(slope) # 0.5 两种方法都应该得到斜率为0.5,这与我之前的计算一致。 用户的需求是明确的,但可能需要确保自己理解正确。例如,数据点是否正确?是否输入无误?比如第三个点是(1,1),所以当x=1时,y=1,这看起来没问题。计算得出的斜率为0.5是正确的。 然后,用户可能需要代码的展示,以验证结果。所以,在回答中应该给出代码示例,并说明结果。此外,可能需要解释数学推导过程,让用户理解为什么斜率为0.5。 总结来说,这个问题的解决步骤是:数学推导计算斜率,然后通过代码验证结果。用户可能需要的是详细步骤的解释,或者直接的答案和代码。根据用户的问题,明确要求用代码解决,所以代码部分必不可少,同时可能需要简要的数学说明。</think>以下是使用**最小二乘法**求解线性模型斜率的详细步骤及代码实现: --- ### **数学推导** 1. **数据准备** 给定数据集$D = \{(-1,0),\ (0,0),\ (1,1)\}$,设线性模型为: $$ y = wx + b $$ 其中$w$为斜率,$b$为截距。 2. **均值计算** - $x$的均值:$\bar{x} = \frac{(-1) + 0 + 1}{3} = 0$ - $y$的均值:$\bar{y} = \frac{0 + 0 + 1}{3} = \frac{1}{3}$ 3. **协方差与方差** 斜率$w$的公式为: $$ w = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^n (x_i - \bar{x})^2} $$ 代入数据计算: - 分子:$(-1-0)(0-\frac{1}{3}) + (0-0)(0-\frac{1}{3}) + (1-0)(1-\frac{1}{3}) = \frac{1}{3} + 0 + \frac{2}{3} = 1$ - 分母:$(-1-0)^2 + (0-0)^2 + (1-0)^2 = 1 + 0 + 1 = 2$ - 斜率:$w = \frac{1}{2} = 0.5$ --- ### **代码实现** 使用Python的`numpy`库直接求解: ```python import numpy as np # 输入数据 X = np.array([-1, 0, 1]).reshape(-1, 1) # 特征矩阵 y = np.array([0, 0, 1]) # 标签向量 # 最小二乘法拟合线性模型 coefficients = np.polyfit(X.flatten(), y, deg=1) slope = coefficients[0] print(f"最小二乘法求得的斜率为: {slope:.1f}") ``` **输出**: ``` 最小二乘法求得的斜率为: 0.5 ``` --- ### **分步解释** 1. **数据矩阵构建** 将特征$x$和标签$y$转换为NumPy数组,并确保维度匹配(`reshape(-1,1)`用于将一维数组转为列向量)。 2. **调用`np.polyfit`函数** - `deg=1`表示拟合一次多项式(即线性模型) - 返回的`coefficients`数组中,第一个元素是斜率$w$,第二个元素是截距$b$。 3. **验证结果** 通过数学公式和代码计算均得到斜率为$0.5$,证明结果正确。 --- ### **最终结论** 对于数据集$D$,最小二乘法的线性模型斜率为 **$0.5$**,完整模型为: $$ y = 0.5x + \frac{1}{3} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值