大数据-206 数据挖掘 机器学习理论 - 多元线性回归 回归算法实现 算法评估指标

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

目前已经更新到了:

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

章节内容

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

  • 线性回归
  • 最小二乘法
  • 多元线性

在这里插入图片描述

多元线性回归实现

利用矩阵乘法编写回归算法

多元线性回归的执行函数编写并不复杂,主要设计大量的矩阵计算,需要借助 Numpy 中的矩阵数据格式来完成。
首先执行标准导入:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

执行结果如下图所示,如果报错可能是缺少了库,需要安装:
在这里插入图片描述
编写线性回归函数,同理,我们假设输入数据集为 DataFrame,且最后一列为标签值:

def standRegres(dataSet):xMat = np.mat(dataSet.iloc[:,:-1].values) # 提取特征yMat = np.mat(dataSet.iloc[:,-1].values).T # 提取标签xTx = xMat.T*xMatif np.linalg.det(xTx) ==0:print('This matrix is singular,cannot do inverse') #行列式为0,则该矩阵为奇异矩阵,无法求解逆矩阵returnws = xTx.I * (xMat.T*yMat)return ws

这里需要判断 XTX 是否为满秩矩阵,若不满秩,则无法对其进行求逆矩阵的操作。定义函数后,即可测试运行效果,此处我们建立线性随机数进行多元线性回归方程拟合。这里需要注意的是,当使用矩阵分解来求解多元线性回归方程时,必须添加一列全为 1 的列,用于表征线性方程截距W0。

rng = np.random.RandomState(1) # 设置随机种子
x = 5*rng.rand(100) # 100个[0,5)的随机数
y = 2*x-5+rng.randn(100) # 真实规律的标签取值
X = pd.DataFrame(x)
Y = pd.DataFrame(y)
ex = pd.DataFrame(np.ones([100,1])) #添加一列权威1的列,表示截距
data = pd.concat([ex,X,Y],axis=1)

数据满足基本的建模要求,然后执行函数运算:

ws = standRegres(data)
ws

执行结果如下图所示:
在这里插入图片描述
返回结果即为各列特征权重,其中数据集第一列值均为 1,因此返回结果的第一个分量表示截距,然后可以用可视化图形展示模型拟合效果:

yhat = data.iloc[:,:-1].values*ws # 预测标签值
plt.plot(data.iloc[:,1],data.iloc[:,2],'o') #原始数据点
plt.plot(data.iloc[:,1],yhat) # 拟合直线

执行结果如下图所示:
在这里插入图片描述

算法评估指标

残差平方和 SSE,其计算公式如下:
在这里插入图片描述其中的 m 为数据集记录书,yi 为实际标签值,y^为预测值,则可利用下面表达式进行计算:

y = data.iloc[:,-1].values
yhat = yhat.flatten()
SSE = np.power(yhat-y,2).sum()
print(SSE)

执行结果如下图所示:
在这里插入图片描述
当然也可以编写成一个完整的函数,为提高服用性,设置输入参数为数据集和回归方法:

def sseCal(dataSet,regres):n = dataSet.shape[0]y = dataSet.iloc[:,-1].valuesws = regres(dataSet)yhat = dataSet.iloc[:,:-1].values*wsyhat = yhat.flatten()SSE = np.power(yhat-y,2).sum()return SSE

测试运行:

sseCal(data,standRegres)

执行结果如下:
在这里插入图片描述
同时,在回归算法中,为了消除数据集规模对残差平方和的影响,往往我们会计算平均残差 MSE:

在这里插入图片描述
其中 m 为数据集样例个数,以及 RMSE 误差的均方根,为 MSE 开平方后所得结果。当然除此之外最常用的还是 R - square 判定系数,判定系数的计算需要使用之前介绍的组间误差平方和与离差平方和的概念。
在回归分析中,SSR 表示聚类中类似的组间平方和概念,译为:Sum of squares of the regression,由预测数据与标签均值之间差值的平方和构成。

在这里插入图片描述
而 SST (Total sum of squares)则是实际值和均值之间的差值的平方和:

在这里插入图片描述

对比之前介绍的聚类分析,此处可对比理解为以点聚点。同样,和轮廓系数类似,最终的判断系数表也同时结合了“组内误差”和“组件误差”两个指标。

在这里插入图片描述
判定系数 R方 测度了回归直线对观测数据的拟合程度:

  • 若所有观测点都落在了直线上,残差平方和为 SSE = 0,则 R 方 = 1,拟合是完全的
  • 如果 y 的变化与 x 无关,完全无助于解释 y 的变差,R 方 = 0。

可见 R 方的取值范围是 [0,1]:

  • R 方越接近 1,表明回归平方和占总平方和的比例越大,回归直线与各个观测点越接近,用 x 的变化来解释 y 值变差(取值的波动称为变差)的部分越多,回归直线的拟合程度就越好。
  • 反之,R 方越接近 0,回归直线的拟合程度就越差。

接下来,尝试计算上述拟合结果的判定系数:

sse = sseCal(data,standRegres)
y = data.iloc[:,-1].values
sst = np.power(y-y.mean(),2).sum()
1-sse/sst

执行结果如下所示:
在这里插入图片描述
结果为 0.91,能够看出最终拟合效果非常好,当然,我们也可以编写函数封装计算判断系数的相关操作,同样留一个调整回归函数的接口。

def rSquare(dataSet,regres):
sse = sseCal(dataSet,regres)
y = dataSet.iloc[:,-1].values
sst = np.power(y-y.mean(),2).sum()
return 1-sse/sst

然后进行测试

rSquare(data,standRegres)

执行结果如下图所示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463608.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python+Appium+Pytest+Allure自动化测试框架-安装篇

文章目录 安装安装ADT安装NodeJs安装python安装appium安装Appium Server(可选)安装Appium-Inspector(可选)安装allure安装pytest PythonAppiumPytestAllure框架的安装 Appium是一个开源工具,是跨平台的,用于…

Nature Methods | 新型三维光场显微成像技术

欢迎关注GZH《光场视觉》 近日,中科院脑科学与智能技术卓越创新中心王凯研究组在《自然方法》(Nature Methods)上,在线发表了题为Volumetric Voltage Imaging of Neuronal Populations in Mouse Brain by Confocal Light Field M…

深度学习基础—循环神经网络的梯度消失与解决

引言 深度学习基础—循环神经网络(RNN)https://blog.csdn.net/sniper_fandc/article/details/143417972?fromshareblogdetail&sharetypeblogdetail&sharerId143417972&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link深…

基于向量检索的RAG大模型

一、什么是向量 向量是一种有大小和方向的数学对象。它可以表示为从一个点到另一个点的有向线段。例如,二维空间中的向量可以表示为 (𝑥,𝑦) ,表示从原点 (0,0)到点 (𝑥,𝑦)的有向线段。 1.1、文本向量 1…

Bartender 5 for Mac 菜单栏管理软件 安装教程【保姆级教程,操作简单小白轻松上手使用】

Mac分享吧 文章目录 Bartender 5 for Mac 菜单栏管理软件 安装完成,软件打开效果一、Bartender 5 菜单栏管理软件 Mac电脑版——v5.2.3⚠️注意事项:1️⃣:下载软件2️⃣:安装软件3️⃣:打开软件,根据自己…

国产操作系统重新安装软件商店

国产操作系统类似于手机的“应用商店”,都会有一个“软件商店”,方便用户安装管理电脑的软件。这个软件商店不仅有各种软件,还有各类外设驱动和移动应用环境模拟功能。软件商店可以下载安装软件,还可以更新、卸载软件。 软件商店 …

FastAPI中如果async def和def 路由的区别

在python的整体生态中,虽然已经有很多库支持了异步调用,如可以使用httpx或者aiohttp代替requests库发起http请求,使用asyncio.sleep 代替time.sleep, 但是依然还有很多优秀的第三方库是不支持异步调用也没有可代替的库&#xff0c…

Pinctrl子系统中Pincontroller和client驱动程序的编写

往期内容 本专栏往期内容: Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析:imx_pinctrl_soc_info结构体Pinctrl子系统中c…

【C++动态规划】2435. 矩阵中和能被 K 整除的路径|1951

本文涉及知识点 C动态规划 LeetCode2435. 矩阵中和能被 K 整除的路径 给你一个下标从 0 开始的 m x n 整数矩阵 grid 和一个整数 k 。你从起点 (0, 0) 出发,每一步只能往 下 或者往 右 ,你想要到达终点 (m - 1, n - 1) 。 请你返回路径和能被 k 整除的…

【QT】Qt对话框

个人主页~ Qt窗口属性~ Qt窗口 五、对话框2、Qt内置对话框(1)Message Box(2)QColorDialog(3)QFileDialog(4)QFontDialog(5)QInputDialog 五、对话框 2、Qt内…

视频推荐的算法(字节青训)

题目: 西瓜视频 正在开发一个新功能,旨在将访问量达到80百分位数以上的视频展示在首页的推荐列表中。实现一个程序,计算给定数据中的80百分位数。 例如:假设有一个包含从1到100的整数数组,80百分位数的值为80&#…

线程基础知识、jmm(Java内存模型)

目录 线程基础知识 并发与并行 进程和线程 线程优先级 创建线程的方式主要有三种 休眠 作出让步 join() 方法 线程协作注意什么 理解线程状态 选择合适的协作工具 共享资源的访问控制 避免竞争条件 创建线程几种方式 线程状态,状态之间切换 新建&…

2.数组越界访问如何调试HardFault错误

数组越界 在项目开发过程中,配置串口外设是一个常见的任务,但在实际操作中,我们可能会遇到一些预料之外的问题。例如,在调试过程中,我们发现单片机只接受了一次数据后便不再接收,这无疑是一个棘手的问题。…

0-ARM Linux驱动开发-字符设备

一、字符设备概述 Linux 系统中,设备被分为字符设备、块设备和网络设备等。字符设备以字节流的方式进行数据传输,数据的访问是按顺序的,一个字节一个字节地进行读取和写入操作,没有缓冲区。例如,终端(/dev…

openGauss数据库-头歌实验1-4 数据库及表的创建

一、创建数据库 (一)任务描述 本关任务:创建指定数据库。 (二)相关知识 数据库其实就是可以存放大量数据的仓库,学习数据库我们就从创建一个数据库开始吧。 为了完成本关任务,你需要掌握&a…

深入浅出 Spring Boot 与 Shiro:构建安全认证与权限管理框架

一、Shiro框架概念 (一)Shiro框架概念 1.概念: Shiro是apache旗下一个开源安全框架,它对软件系统中的安全认证相关功能进行了封装,实现了用户身份认证,权限授权、加密、会话管理等功能,组成一…

重学SpringBoot3-整合 Elasticsearch 8.x (一)客户端方式

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 这里写目录标题 1. 为什么选择 Elasticsearch?2. Spring Boot 3 和 Elasticsearch 8.x 的集成概述2.1 准备工作2.2 添加依赖 3. Elasticsearch 客户端配置方式…

MyBaitsPlus 基本用法简单整理

MyBaitsPlus 基本用法整理 查询单表查询查询单条数据写法一:(this.getOne)写法二:(XxxMapper.selectById)写法三:(this.getById) 查询 list 集合(this.list&a…

基于MATLAB的战术手势识别

手势识别的研究起步于20世纪末,由于计算机技术的发展,特别是近年来虚拟现实技术的发展,手势识别的研究也到达一个新的高度。熵分析法是韩国的李金石、李振恩等人通过从背景复杂的视频数据中分割出人的手势形状,然后计算手型的质心…

Mac 配置SourceTree集成云效

1、背景 工作使用的是自己的笔记本,一个是比较卡,在一个是敏感信息比较多还是使用公司的电脑,但是系统是Mac就很麻烦,在网上找了帖子记录一下 2、配置 打开终端 ssh-keygen -t rsa #一直回车就行 cd .ssh cat id_rsa.pub #查…