0
点赞
收藏
分享

微信扫一扫

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|

一、线性回归的Scikit-learn实现

### --- 线性回归的Scikit-learn实现
~~~ 使用scikit-learn算法库实现线性回归算法,并计算相应评价指标。
~~~ 回顾前文介绍的相关知识进行下述计算。

from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(data.iloc[:,:-1].values,data.iloc[:,-1].values)
reg.coef_ # 查看方程系数
reg.intercept_ # 查看系数
~~~     对比手动计算的ws,其结果高度一致。
~~~ 然后计算模型MSE和判别系数:
~~~ 和上述手动编写函数结果一致。

from sklearn.metrics import mean_squared_error,r2_score
yhat = reg.predict(data.iloc[:,:-1])
mean_squared_error(y,yhat)
r2_score(y,yhat)

二、多重共线性

### --- 多重共线性

~~~ 虽然在线性回归的求解过程中,通过借助最小二乘法能够迅速找到全域最优解,
~~~ 但最小二乘法本身使用条件较为苛刻,
~~~ 必须要求当XtX为满秩矩阵时才可进行逆矩阵或广义逆矩阵的求解。
~~~ 在实际应用中经常会遇见矩阵不存在逆矩阵或广义逆矩阵的情况,
~~~ 并且X 的各列存在线性相关关系(即多重共线性)的时候,最小二乘法的求解结果不唯一。
~~~     这里需要注意的是,在进行数据采集过程中,数据集各列是对同一个客观事物进行客观描述,
~~~ 很难避免多重共线性的存在,因此存在共线性是很多数据集的一般情况。
~~~ 当然更为极端的情况则是数据集的列比行多,此时最小二乘法无法对其进行求解。
~~~ 因此,寻找线性回归算法的优化方案势在必行。

~~~ 首先我们来了解下多重共线性。
~~~ 在第二节中我们曾推导了多元线性回归使用最小二乘法的求解原理,
~~~ 我们对多元线性回归的损失函数求导,并得出求解系数 的式子和过程:

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_逆矩阵

~~~     在最后一步中我们需要左乘XtX的逆矩阵,
~~~ 而逆矩阵存在的充分必要条件是特征矩阵不存在多重共线性。
~~~ 多重共线性这个词对于许多人来说都不陌生,这一节我们会来深入讲解,
~~~ 什么是多重共线性,对我们参数求解又会有什么影响。
~~~     # 逆矩阵存在的充分必要条件

~~~ 首先,我们需要先理解逆矩阵存在与否的意义和影响。一个矩阵什么情况下才可以有逆矩阵呢?
~~~ 根据逆矩阵的定理,若|A|/=0,则矩阵A可逆,且

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_逆矩阵_02

~~~     其中A*是矩阵A的伴随矩阵,任何矩阵都可以有伴随矩阵,因此这一部分不影响逆矩阵的存在性。
~~~ 而分母上的行列式|A|就不同了,位于分母的变量不能为0,一旦为0则无法计算出逆矩阵。
~~~ 因此逆矩阵存在的充分必要条件是:矩阵的行列式不能为0,对于线性回归而言,即是说|XtX|不能为0。
~~~ 这是使用最小二乘法来求解线性回归的核心条件之一。
~~~     # 行列式不为0的充分必要条件

~~~ 那行列式要不为0,需要满足什么条件?在这里,我们先复习一下线性代数中的基本知识。
~~~ 假设我们的特征矩阵X结构为(m,n),则XtX就是结构为(n,m)的矩阵乘以结构为(m,n)的矩阵,
~~~ 从而得到结果为(n,n)的方阵。

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_最小二乘法_03

~~~     # 因此以下所有的例子都将以方阵进行举例,方便大家理解。首先区别一下矩阵和行列式:

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_最小二乘法_04

重要定义:矩阵和行列式


矩阵是⼀组数按一定方式排列成的数表,⼀般记作A

行列式是这⼀组数按某种运算法则最后计算出来的⼀个数,通常记作|A|或者detA

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_最小二乘法_05

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_线性回归_06

~~~     三个特征的特征矩阵的行列式就有六个交互项,在现实中我们的特征矩阵不可能是如此低维度的数据,
~~~ 因此使用这样的方式计算行列式就变得异常困难。
~~~ 在线性代数中,我们可以通过行列式的计算将⼀个行列式整合成⼀个梯形的行列式:

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_线性回归_07

~~~     梯形的行列式表现为,所有的数字都被整合到对⻆线的上方或下方(通常是上方),
~~~ 虽然具体的数字发生了变化(比如由X11变成了a11),
~~~ 但是行列式的大小在初等行变换的过程中是不变的。
~~~ 对于梯形行列式,行列式的计算要容易很多:

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_最小二乘法_08

~~~     不难发现,由于梯形行列式下半部分为0,整个矩阵的行列式其实就是梯形行列式对角线上的元素相乘。
~~~ 并且此时此刻,只要对角线上的任意元素为0,整个行列式都会为0。
~~~ 那只要对角线上没有⼀个元素为0,行列式就不会为0了。
~~~ 在这里,我们来引入⼀个重要的概念:满秩矩阵。

重要定义:满秩矩阵


满秩矩阵:A是⼀个n行n列的矩阵,若A转换为梯形矩阵后,

没有任何全为0的行或者全为0的列,则称A为满秩矩阵。

简单来说,只要对⻆线上没有⼀个元素为0,则这个矩阵中绝对不可能存在全为0的行或列。

举例来说,下面的矩阵就不是满秩矩阵,因为它的对角线上有⼀个0,因此它存在全为0的行。

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_线性回归_09

~~~     即是说,矩阵满秩(即转换为梯形矩阵后对角线上没有0)是矩阵的行列式不为0的充分必要条件。
~~~ # 矩阵满秩的充分必要条件
~~~ ⼀个矩阵要满秩,则转换为梯形矩阵后的对角线上没有0,
~~~ 那什么样的矩阵在转换为梯形矩阵后对角线上才没有0呢?来看下面的三个矩阵:

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_逆矩阵_10

~~~     我们可以对矩阵做初等行变换和列变换,包括交换行/列顺序,
~~~ 将⼀列/⼀行乘以⼀个常数后加减到另⼀列/⼀行上,来将矩阵化为梯形矩阵。
~~~ 对于上面的两个矩阵我们可以有如下变换:

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_线性回归_11

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_线性回归_12

~~~     如此就转换成了梯形矩阵。我们可以看到,矩阵A明显不是满秩的,它有全零行所以行列式会为0。
~~~ 而矩阵B和C没有全零行所以满秩。
~~~ 而矩阵A和矩阵B的区别在于,A中存在着完全具有线性关系的两行(1,1,2和2,2,4),而B和C中则没有这样的两行。
~~~ 而矩阵B虽然对角线上每个元素都不为0,但具有非常接近于0的元素0.02,而矩阵C的对角线上没有任何元素特别接近于0。

~~~ 矩阵A中第一行和第三行的关系,被称为“精确相关关系”,即完全相关,一行可使另一行为0。在这种精
~~~ 确相关关系下,矩阵A的行列式为0,则矩阵A的逆不可能存在。
~~~ 在我们的最小二乘法中,如果矩阵XtX中存在这种精确相关关系,则逆不存在,
~~~ 最小⼆乘法完全无法使用,线性回归会无法求出结果。

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_线性回归_13

~~~     矩阵B中第一行和第三行的关系不太⼀样,他们之间非常接近于”精确相关关系“,
~~~ 但又不是完全相关,一行不能使另一行为0,这种关系被称为”高度相关关系“。
~~~ 在这种高度相关关系下,矩阵的行列式不为0,
~~~ 但是⼀个非常接近0数,矩阵A的逆存在,不过接近于无限大。
~~~ 在这种情况下,最小二乘法可以使用,不过得到的逆会很大,直接影响我们对参数向量W的求解:

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_线性回归_14

~~~     这样求解出来的参数向量W会很大 ,因此会影响建模的结果,造成模型有偏差或者不可用。
~~~ 精确相关关系和高度相关关系并称为"多重共线性"。
~~~ 在多重共线性下,模型无法建立,或者模型不可用。

~~~ 相对的,矩阵C的行之间结果相互独立,梯形矩阵看起来非常正常,
~~~ 它的对角线上没有任何元素特别接近于0,因此其行列式也就不会接近0或者为0,
~~~ 因此矩阵C得出的参数向量就不会有太大偏差,对于我们拟合而言是比较理想的。

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_最小二乘法_15

~~~     从上面的所有过程我们可以看得出来,⼀个矩阵如果要满秩,
~~~ 则要求矩阵中每个向量之间不能存在多重共线性,这也构成了线性回归算法对于特征矩阵的要求。

|NO.Z.00011|——————————|BigDataEnd|——|Arithmetic&Machine.v11|——|Machine:监督学习算法.v10|_逆矩阵_16

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart

                                                                                                                                                   ——W.S.Landor


举报

相关推荐

0 条评论