机器学习基础08-回归算法矩阵分析(基于波士顿房价(Boston House Price)数据集)

回归算法通常涉及到使用矩阵来表示数据和模型参数。线性回归是最常见的回归算法之一,它可以用矩阵形式来表示。

考虑一个简单的线性回归模型: y = m x + b y = mx + b y=mx+b,其中 y y y 是因变量, x x x 是自变量, m m m 是斜率, b b b 是截距。将这个模型表示成矩阵形式,可以如下所示:

在这里插入图片描述
在上面的矩阵表达中,左边的矩阵表示因变量 y y y,右边的矩阵表示自变量 x x x 和一个常数项 1 1 1。而模型参数 m m m b b b 则以矩阵的形式表示。

通过最小化残差(观测值与模型预测值之间的差异)来确定最佳的参数 m m m b b b,这通常涉及到矩阵计算中的求解方法,如最小二乘法。

其他更复杂的回归算法,例如多变量线性回归、岭回归、Lasso回归等,也可以通过矩阵表示来进行推导和求解。矩阵表示使得回归算法的计算更加紧凑和易于理解。

接下来将介绍三种评估机器学习的回归算法的评估矩阵。

  1. 平均绝对误差(Mean Absolute Error,MAE)。
  2. 均方误差(Mean Squared Error,MSE)。
  3. 决定系数(R2)。

示例中采用将使用波士顿房价(Boston House Price)数据集进行实验操作

数据集下载地址

https://github.com/selva86/datasets/blob/master/BostonHousing.csv

数据集介绍:

波士顿房价预测更像是预测一个连续值,当然这也是一个非常经典的机器学习案例
在这里插入图片描述

平均绝对误差

平均绝对误差是所有单个观测值与算术平均值的偏差的绝对值的平均值。与平均误差相比,平均绝对误差由于离差被绝对值化,不会出现正负相抵消的情况,因而,平均绝对误差能更好地反映预测值误差的实际情况。

代码如下:


import pandas as pd
from sklearn.linear_model import  LinearRegressionfrom sklearn.model_selection import  KFold, cross_val_score#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)array = data.valuesX = array[:, 0:13]
Y = array[:, 13]n_splits = 10seed = 7kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = LinearRegression()scoring = 'neg_mean_absolute_error'results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)print("MSE: %.3f (%.3f)" % (results.mean(), results.std()))

执行结果如下:


MSE: -3.387 (0.667)

均方误差

均方误差是衡量平均误差的方法,可以评价数据的变化程度。均方根误差是均方误差的算术平方根。均方误差的值越小,说明用该预测模型描述实验数据的准确度越高。

代码如下:


import pandas as pd
from sklearn.linear_model import  LinearRegressionfrom sklearn.model_selection import  KFold, cross_val_score#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)array = data.valuesX = array[:, 0:13]
Y = array[:, 13]n_splits = 10seed = 7kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = LinearRegression()scoring = 'neg_mean_squared_error'results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)print("MSE: %.3f (%.3f)" % (results.mean(), results.std()))

运行结果如下:

MSE: -23.747 (11.143)

决定系数(R2)

决定系数,反映因变量的全部变异能通过回归关系被自变量解释的比例。拟合优度越大,自变量对因变量的解释程度越高,自变量引起的变动占总变动的百分比越高,观察点在回归直线附近越密集。

如R2为0.8,则表示回归关系可以解释因变量80%的变异。换句话说,如果我们能控制自变量不变,则因变量的变异程度会减少80%。
决定系数(R2)的特点:

  • 可决系数是非负的统计量。
  • 可决系数的取值范围:0≤R2≤1。
  • 可决系数是样本观测值的函数,是因随机抽样而变动的随机变量。为
    此,对可决系数的统计的可靠性也应进行检验。

代码如下:


import pandas as pd
from sklearn.linear_model import  LinearRegressionfrom sklearn.model_selection import  KFold, cross_val_score#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)array = data.valuesX = array[:, 0:13]
Y = array[:, 13]n_splits = 10seed = 7kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = LinearRegression()scoring = 'r2'results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)print("R2: %.3f (%.3f)" % (results.mean(), results.std()))

执行结果如下:

R2: 0.718 (0.099)

通常情况下,R2(也称为决定系数)是用来衡量一个回归模型的拟合优度的指标。它的取值范围在0到1之间,越接近1表示模型拟合得越好,越接近0表示模型拟合较差。

在这个结果中,“R2: 0.718” 表示模型的拟合优度为0.718,大致可以理解为模型解释了目标变量约71.8%的方差。而 “(0.099)” 则是标准误差的信息,用于表示R2的置信区间。

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

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

相关文章

Linux 远程登录

Linux 远程登录 Linux 一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的 Linux 服务器。 这时我们就需要远程登录到Linux服务器来管理维护系统。 Linux 系统中是通过 ssh 服务实现的远程登录功能,默认 ssh 服务端口号为 2…

相关性分析和回归分析

一 相关性分析 相关性分析一般是用来简单的分析数据之间的相关性关系,用来研究的是连续性的数值变量或者量表的数据,只能分析出来每两个变量之间的相关性关系。一般是用于在回归分析之前,用于对于数据进行一个简单的相关性探讨,回…

Spring系列三:基于注解配置bean

文章目录 💗通过注解配置bean🍝基本介绍🍝快速入门🍝注意事项和细节 💗自己实现Spring注解配置Bean机制🍝需求说明🍝思路分析🍝注意事项和细节 💗自动装配 Autowired&…

分布式 - 服务器Nginx:一小时入门系列之HTTP反向代理

文章目录 1. 正向代理和反向代理2. 配置代理服务3. proxy_pass 命令解析4. 设置代理请求headers 1. 正向代理和反向代理 正向代理是客户端通过代理服务器访问互联网资源的方式。在这种情况下,客户端向代理服务器发送请求,代理服务器再向互联网上的服务器…

C++初阶语法——引用,从此和指针说byebye

前言:相信学过C语言的同学肯定被指针深深折磨过,从一级指针到二级指针,数组指针,函数指针等等,可谓是谈针色变。而在C中,使用引用代替了指针的使用,大大降低了我们学习的难度。 引用 一.什么是…

Node.js新手在哪儿找小项目练手?

前言 可以参考一下下面的nodejs相关的项目,希望对你的学习有所帮助,废话少说,让我们直接进入正题>> 1、 NodeBB Star: 13.3k 一个基于Node.js的现代化社区论坛软件,具有快速、可扩展、易于使用和灵活的特点。它支持多种数…

sentinel简单使用

核心demo&#xff1a; 1 引入依赖: <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.0</version> </dependency>2 核心代码&#xff1a; 3 限流保护代码&#xff1a;…

如何搭建一个成功的酒店小程序?

随着移动互联网的发展&#xff0c;小程序成为了不可忽视的商业工具之一。对于酒店行业来说&#xff0c;开发一个酒店预订小程序可以为客户提供更加便捷的预订方式&#xff0c;同时也带来了更多的商机。下面&#xff0c;我们将介绍一个简单的搭建流程&#xff0c;帮助新手快速上…

uC-OS2 V2.93 STM32L476 移植:系统移植篇

前言 上一篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG STM32L476RG 的 裸机工程&#xff0c;并且下载了 uC-OS2 V2.93 的源码&#xff0c;接下来&#xff0c;开始系统移植 开发环境 win10 64位 Keil uVision5&#xff0c;MDK V5.36 uC-OS2 V2.93 开发板&#xff1a;NUC…

怎么样通过Bootstrap已经编译好(压缩好)的源码去查看符合阅读习惯的源码【通过Source Map(源映射)文件实现】

阅读本篇博文前&#xff0c;建议大家先看看下面这篇博文&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/132089650 Bootstrap经编译(压缩)后的源码百度网盘下载地址&#xff1a; https://pan.baidu.com/s/14BM9gpC3K-LKxhyLGh4J9Q?pwdm02m Bootstrap未经编译…

element vue2 动态添加 select+tree

难点在 1 添加一组一组的渲染 是往数组里push对象 循环的&#xff1b;但是要注意对象的结构! 因为这涉及到编辑完成后&#xff0c;表单提交时候的 校验&#xff01; 是校验每一个select tree里边 是否勾选 2 是在后期做编辑回显的时候 保证后端返回的值 是渲染到 select中的tr…

【云原生】详细学习Docker-Swarm部署搭建和基本使用

个人主页&#xff1a;征服bug-CSDN博客 kubernetes专栏&#xff1a;云原生_征服bug的博客-CSDN博客 目录 Docker-Swarm编排 1.概述 2.docker swarm优点 3.节点类型 4.服务和任务 5.路由网格 6.实践Docker swarm 1.概述 Docker Swarm 是 Docker 的集群管理工具。它将 Doc…