机器学习基础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  LinearRegression

from sklearn.model_selection import  KFold, cross_val_score

#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)

array = data.values

X = array[:, 0:13]
Y = array[:, 13]

n_splits = 10

seed = 7

kflod = 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  LinearRegression

from sklearn.model_selection import  KFold, cross_val_score

#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)

array = data.values

X = array[:, 0:13]
Y = array[:, 13]

n_splits = 10

seed = 7

kflod = 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  LinearRegression

from sklearn.model_selection import  KFold, cross_val_score

#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)

array = data.values

X = array[:, 0:13]
Y = array[:, 13]

n_splits = 10

seed = 7

kflod = 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的置信区间。

相关推荐
契合qht53_shine几秒前
OpenCV 从入门到精通(day_05)
人工智能·opencv·计算机视觉
3DVisionary8 分钟前
3D-DIC与机器学习协同模拟材料应力-应变本构行为研究
人工智能·机器学习·3d·3d-dic技术 机器学习·应力-应变本构行为·卷积神经网络(ecnn)·数字图像相关法(dic)
神经星星10 分钟前
无需预对齐即可消除批次效应,东京大学团队开发深度学习框架STAIG,揭示肿瘤微环境中的详细基因信息
人工智能·深度学习·机器学习
神经星星10 分钟前
【vLLM 学习】调试技巧
人工智能·机器学习·编程语言
呵呵哒( ̄▽ ̄)"10 分钟前
线性代数:同解(1)
python·线性代数·机器学习
SweetCode16 分钟前
裴蜀定理:整数解的奥秘
数据结构·python·线性代数·算法·机器学习
程序员Linc28 分钟前
写给新人的深度学习扫盲贴:向量与矩阵
人工智能·深度学习·矩阵·向量
CryptoPP29 分钟前
springboot 对接马来西亚数据源API等多个国家的数据源
spring boot·后端·python·金融·区块链
xcLeigh36 分钟前
OpenCV从零开始:30天掌握图像处理基础
图像处理·人工智能·python·opencv
大乔乔布斯37 分钟前
AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘ 解决方法
python·bash·ssl