大数据-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.xdnf.cn/news/2822.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Effective C++】阅读笔记4

1. 确保公有继承中有is-a的关系 Is-a关系理解 该关系就是派生类应该具备基类的所有特性,并且可以替代基类对象使用,例如猫和狗都是动物的派生类,因为猫和狗都和动物形成了is-a关系,猫和狗都是动物。 在该关系下,派生类…

嵌入式实验2--数码管显示(基础+进阶)

一、数码管显示 0.想实现效果: 数码管交替或同时显示数字 1.电路设计 使用proteus 设计电路 1.1 STM32最小系统 搭建STM32工作基础条件 1.2 数码管电路 1.2.1 数码管 a.共阴极 abg dp都是led灯,这些led灯的公共端接地,就是共阴极&…

【LeetCode:633. 平方数之和 + 双指针】

在这里插入代码片 🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕…

SpringCloud-Eureka注册中心

假如我们的服务提供者user-service部署了多个实例,如图: 大家思考几个问题: order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口?有多个user-service实例地址,order-service调用…

5. 推导仿真

5.1 DCDC电源(以buck电路为例)相关公式推导计算-电感 (1)计算电感的饱和电流和 电感的感值 三角号I:纹波电流 饱和电流:有条件

MySQL rand()函数、rand(n)、生成不重复随机数

文章目录 一、rand()与rand(n)二、rand()使用示例2.1、rand()与order by/group by使用随机排序分组2.2、round()与rand()的组合使用2.3、rand与ceiling的组合使用2.4、rand与floor组合使用2.5、rand与md5组合使用 三、总结3.1、rand()与rand(n)的区别 有时候我们想要生成一个唯…

告别局域网限制!轻松远程访问本地Paperless-ngx文档管理系统远程办公

前言:本文主要介绍如何在Linux系统本地Docker部署Paperless-ngx开源文档管理系统,并结合cpolar内网穿透工具解决本地部署后因为没有公网IP受到局域网访问限制,在异地也能随时远程访问的困扰。 Paperless-ngx是一个开源的文档管理系统&#x…

koa项目实战 == 实现注册登录鉴权

一. 项目的初始化 1 npm 初始化 npm init -y生成package.json文件: 记录项目的依赖 2 git 初始化 git init生成’.git’隐藏文件夹, git 的本地仓库 3 创建 ReadMe 文件 二. 搭建项目 1 安装 Koa 框架 npm install koa2 编写最基本的 app 创建src/main.js const Koa…

中烟创新:以AI审核平台助力烟草行业高效发展

企业对于高效、准确且标准化的文档审核流程需求日益迫切。传统的人工审核方式,不仅耗时费力,而且易受个人主观因素影响,导致审核标准难以统一,影响了工作效率与审核质量。北京中烟创新科技有限公司(简称:“…

SpringBoot框架:作业管理技术新解

4 系统设计 4.1系统概要设计 作业管理系统并没有使用C/S结构,而是基于网络浏览器的方式去访问服务器,进而获取需要的数据信息,这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构&#xff0c…

Chrome 插件怎么安装与下载?超详细

原文链接: https://www.chajianxw.com/tutorial/how-to-install-chrome-plugin.html 前言 国内因为无法访问 Chrome 应用商店的缘故,导致很多优秀的扩展程序无法正常下载与安装。本文将手把手教你如何通过离线安装Chrome 插件,全文图文讲解…

实现图书管理系统

1. 图书管理系统菜单 如上图给用户选项 1. 管理员 2. 普通用户 2. 实现基本框架 右键点src,选择new,选择Package命名三个包 book operation user 1.先选择book包,new两个类 book bookList 在book类中定义书的基本属性,并重写…

黑马官网最新2024前端就业课V8.5笔记---CSS篇(1)

Css 定义 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容) Css 引入方式 内部样式表: CSS 代码写在 style 标签里面 外部样式表: 开发使用 CSS 代码写在单独的 CSS 文件中(.css) 在 HTML 使用 link …

下载pytorch报错:没有发现某个版本

报错如下: 解决: 降级python版本,显卡小于等于 11.3 时,下载pytorch gpu时,python版本选择:3.7即可。

cuda、pytorch-gpu安装踩坑!!!

前提:已经安装了acanoda cuda11.6下载 直接搜索cuda11.6 acanoda操作 python版本3.9 conda create -n pytorch python3.9conda activate pytorch安装Pytorch-gpu版本等包 要使用pip安装,cu116cuda11.6版本 pip install torch1.13.1cu116 torchvi…

音视频入门基础:H.264专题(17)——FFmpeg源码中,获取H.264视频的profile的实现

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

LeetCode --- 421周赛

题目列表 3334. 数组的最大因子得分 3335. 字符串转换后的长度 I 3336. 最大公约数相等的子序列数量 3337. 字符串转换后的长度 II 一、数组的最大因子得分 数据范围足够小,可以用暴力枚举移除的数字,得到答案,时间复杂度为O(n^2)&#…

Linux下Java的多种方式安装

Linux下Java的多种方式安装 博客: www.lstar.icu 开源地址 Gitee 地址: https://gitee.com/lxwise/iris-blog_parent Github 地址: https://github.com/lxwise/iris-blog_parent 序言 Java是一门面向对象的编程语言,不仅吸收了…

易灵思fpga pwm生成报错

避免复杂总线 选择正确板子 这个是是全部执行 但是不会自动保存 注意设置 或者使用其他文本显示工具 可能约束会掉 注意复位后没有程序 注意软件不同电脑可能报错 问题未知 尽量简单逻辑

JavaEE初阶--servlet篇(三)HttpServlet/response/request对应方法使用

文章目录 1.总括说明2.httpservlet父类2.1方法介绍2.2dopost方法的演示2.3doput方法的演示 3.HttpServletRequest类3.1方法说明3.2方法使用演示3.3getparameter方法使用3.4使用form表单的方式3.5jackson获取参数 4.HttpResponse类4.1设置状态码4.2自动进行刷新4.3重定向跳转4.3…