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

这两天在结合教材和MIT公开课的视频复习线代,希望能够在短时间内捡起两年前学过的东西。当时线代给我的最大感觉就是十分抽象,总是毫无道理地就给出一堆定义、概念和一些奇怪的公式推演,平时做的书后题和考试题大多数有很强技巧性的各种计算,最后感觉学到的全都是各种“毫无关联”的概念、公式和计算套路。

因此最近复习时,着重思考和查找了许多概念之间存在的联系,以及它们的内在意义和常见应用场景,总结在博客的“线性代数”这一类别下。本文主要整理一些基本的公式和结论。

线性方程组:

行初等变换:倍加,(行)对换,倍乘。变换前后的矩阵行等价

若两个方程组的增广矩阵行等价,则具有相同的解集

矩阵A中主元的位置是A中对应于它的阶梯行矩阵先导元素的位置(每列主元pivot的下方元素均为0,主元所在行的左侧元素均为0)

线性方程组的解包括:基本变量(主元列对应的未知量)和自由变量(非主元列对应的未知量)

线性方程组Ax=b 解的存在与唯一性定理:(即方程组相容的充要条件)增广矩阵的最右列不是主元列(即化简后没有形如:[0,0…0,b] 且b != 0的行)
若有解(相容),则:1.若无自由变量,有唯一解
          2.若有自由变量,有无穷多解

Span{u,v}:表示有向量u,v及其线性组合构成的向量集合(包含0向量)

方程Ax=b有解 <=> b是A中各列的线性组合。即矩阵A与向量x相乘,相当于以x中各元素值作为A的各个列向量的权重,对A的各个列向量作线性组合,得到向量b。若A为方阵,则(Ax)的几何意义是:利用矩阵A(m×m)对m维空间中的向量x做一个变换,变换后x的投影为b,仍在m为空间,且变换实际上是对x的长度的方向做了改变。(其几何意义对于理解特征值和特征向量很有帮助)

对于齐次线性方程组 Ax=0,均存在一个解:向量0,称作平凡解。当且仅当方程至少有一个自有变量时(即A的列向量组线性相关时),它有非平凡解。即齐次线性方程组要么仅有0解,要么有无穷多解。在几何意义上,含有非平凡解的齐次解相当于在空间中通过原点的一个“平面”,这个“平面”恰由方程组的基础解系(解集的极大线性无关组)的所有线性组合构成。对于非齐次线性方程组:Ax=b,解集为Ax=0的齐次解加上一个特解,几何上是不过原点的平面。

相容方程组的求解并把解集用参数向量表示,步骤如下:
1.把增广矩阵行化简为简化阶梯形矩阵
2.把每个基本变量用自有变量表示
3.把一般解x表示成向量,若有自由变量,其元素依赖自由变量
4.把x分解为向量的线性组合,组合系数为设定的常数,最终用自由变量作为参数

一组向量{ vi v i }线性无关定义:若向量方程 x1v1+...+xpvp=0 x 1 v 1 + . . . + x p v p = 0 仅有平凡解,则x中的各个(列)向量线性无关。若存在不为0的权值 c1...cp c 1 . . . c p 满足 c1v1+...+cpvp=0 c 1 v 1 + . . . + c p v p = 0 ,则它们线性相关

Rn R n 中任意向量组{ v1...vp v 1 . . . v p },当p>n时线性相关。

若向量组{ v1...vp v 1 . . . v p }包含0向量,则它们线性相关。

线性变换:

之前在理解方程组时,把矩阵A与向量x相乘看做是对A中各列向量的线性组合。除此之外,矩阵乘以向量,也就是对向量做一个线性变换,还有着更加鲜明的几何意义。(这种几何意义可以直接应用在图像处理和图形学中)

对于矩阵A(m×n),Ax=b相当于矩阵A对 Rn R n 空间中的向量x做一个变换,映射到 Rm R m 空间中。由 Rn R n Rm R m 的一个变换(或称映射、函数)T是一个规则,将向量x映射为另一维度空间中的向量T(x)。集合 Rn R n 称为定义域, Rm R m 为取值空间(或余定义域),T(x)称为x在T作用下的像,所有像T(x)的集合称为T的值域。从x映射到Ax即为一个矩阵变换。若A为方阵,则映射后的向量b仅仅是原向量x在长度和方向上的改变(拉伸和旋转)。

线性变换定义:保持向量的加法运算和标量乘法运算具有线性性的变换。

<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、付费专栏及课程。

余额充值