当前位置: 首页 > article >正文

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

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

目前已经更新到了:

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

章节内容

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

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

在这里插入图片描述

代码实现

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

这里需要注意是,在进行数据采集的过程中,数据集各列是对同一个客观事物进行客观描述,很难避免多重共线性的存在,因此存在共线性是很多数据集的一般情况。当然更为极端的情况则是数据集的列比行多,此时最小二乘法无法对其进行求解。因此,寻找性回归算法的优化方案势在必行。
首先我们来了解多重共性,在第二节中我们曾推导了多元线性回归使用最小二乘法的求解原理,我们对多元线性回归的损失函数求导,并得出求解系数 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 就不会有太大的偏差,对于我们拟合而言是比较理想的。

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

在这里插入图片描述


http://www.kler.cn/a/381232.html

相关文章:

  • 云原生服务网格Istio实战
  • iClent3D for Cesium 实现无人机巡检飞行效果
  • druid与pgsql结合踩坑记
  • 消息队列 Kafka 架构组件及其特性
  • GhostRace: Exploiting and Mitigating Speculative Race Conditions-记录
  • 数字时代的医疗挂号变革:SSM+Vue 系统设计与实现之道
  • 【JavaEE初阶 — 多线程】线程安全问题 & synchronized
  • Imperva 数据库与安全解决方案
  • SE-ResUNet论文学习笔记
  • 机器视觉:轮廓匹配算法原理
  • dpdk mempool驱动开发
  • Django学习-项目部署
  • 在Swift开发中简化应用程序发布与权限管理的解决方案——SparkleEasy
  • Claude 3.5 Sonnet模型新增了PDF支持功能
  • Linux中sysctl、systemctl、systemd、init的区别
  • 第6章 Linux软件包企业实战
  • 大模型开发中将企业数据发送给Open AI是否有安全风险?
  • 跨平台Flutter 、ReactNative 开发原理
  • W5500-EVB-Pico2评估板介绍
  • C++面向对象设计模式——单例模式
  • MATLAB绘制水蒸气温度和压力曲线(IAPWS-IF97公式)
  • git远程和本地创建分支并关联
  • 苍穹外卖WebSocket无法建立连接 (修改前端代码)
  • 鸿蒙HarmonyOS开发生日选择弹框
  • 微信小程序uniapp+vue飞机订票航空售票系统
  • MVC 文件夹结构详解