大数据-207 数据挖掘 机器学习理论 - 多重共线性 矩阵满秩 线性回归算法

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(已更完)
  • DataX(已更完)
  • Tez(已更完)
  • 数据挖掘(正在更新...)

章节内容

上节我们完成了如下的内容:

  • 多元线性回归 回归算法实现
  • 多元线性回归 算法评估指标

代码实现

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

python 复制代码
from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(data.iloc[:,:-1].values,data.iloc[:,-1].values)
reg.coef_ # 查看方程系数
reg.intercept_ # 查看系数

对比手动计算的 ws,其结果高度一致。

然后计算模型 MSE 和判别系数:

python 复制代码
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 的各列存在线性相关关系(即多重共线性)的时候,最小二乘法的求解结果不唯一。

这里需要注意是,在进行数据采集的过程中,数据集各列是对同一个客观事物进行客观描述,很难避免多重共线性的存在,因此存在共线性是很多数据集的一般情况。当然更为极端的情况则是数据集的列比行多,此时最小二乘法无法对其进行求解。因此,寻找性回归算法的优化方案势在必行。

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

在最后一步中我们需要左乘 XTX 的逆矩阵,而矩阵存在得充分必要条件是特征不存在多重共线性。

矩阵存在的充分必要条件

首先,我们需要先理解逆矩阵存在与否的意义和影响,一个矩阵什么情况下会有逆矩阵?

根据逆矩阵的定理,若 |A| != 0,则矩阵A 可逆,且:

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

行列式不为 0 的充分必要条件

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

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

任何矩阵都可以有行列式,以一个 3*3 的行列式为例,我们来看看行列式如何计算的?

这个式子乍一看非常混乱,其实并非如此,我们把行列式按照下面的方式排列一下,很容易就看出这个式子实际上怎么回事了:

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

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

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

矩阵满秩的充分必要条件

一个矩阵要满秩,则转换为梯形矩阵后的对角线上没有 0,那什么样的矩阵在对角线上没有 0?来看下面的三个矩阵:

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

继续进行变换:

如此就转换成了梯形矩阵,我们可以看到,矩阵 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 中存在这种精确相关关系,则逆不存在,最小二乘法完全无法使用,线性回归会无法求出结果。

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

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

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

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

相关推荐
m0_742848883 分钟前
机器学习3
人工智能·深度学习·机器学习
B站计算机毕业设计超人15 分钟前
计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
大数据·爬虫·python·深度学习·机器学习·课程设计·推荐算法
使者大牙22 分钟前
【单点知识】基于PyTorch进行模型部署
人工智能·pytorch·python·深度学习
int WINGsssss28 分钟前
对pytorch的底层nccl库进行插桩
人工智能·pytorch·python
In 202934 分钟前
矩阵【Lecode_HOT100】
java·算法·矩阵
美狐美颜sdk35 分钟前
直播实时美颜平台开发详解:基于视频美颜SDK的技术路径
人工智能·计算机视觉·音视频·第三方美颜sdk·美狐美颜sdk
qystca36 分钟前
洛谷 P1722 矩阵 II C语言 记忆化搜索
算法
ashane131438 分钟前
回溯算法实现矩阵最小权重路径-Java版本
线性代数·算法·矩阵
qq_1893704939 分钟前
鸢尾花Iris训练数据和测试数据的分割和训练数据的散点图矩阵绘制
python·线性代数·机器学习·散点图矩阵
SaNDJie43 分钟前
24.11.26 神经网络 参数初始化
大数据·人工智能·神经网络