机器学习基础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的置信区间。

相关推荐
就一枚小白16 分钟前
UE--如何用 Python 调用 C++ 及蓝图函数
c++·python·ue5
m0_7482347118 分钟前
Python大数据可视化:基于spark的短视频推荐系统的设计与实现_django+spider
python·spark·django
看星猩的柴狗27 分钟前
机器学习-高斯混合模型
人工智能·机器学习
--FGC--41 分钟前
【第2篇】 Python与数据库基础
数据库·python·oracle
m0_6305206442 分钟前
Python初识
开发语言·python
power-辰南2 小时前
机器学习之数据分析及特征工程详细分析过程
人工智能·python·机器学习·大模型·特征
少说多想勤做2 小时前
【前沿 热点 顶会】AAAI 2025中与目标检测有关的论文
人工智能·深度学习·神经网络·目标检测·计算机视觉·目标跟踪·aaai
橙子小哥的代码世界4 小时前
【计算机视觉基础CV-图像分类】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用
图像处理·人工智能·深度学习·神经网络·计算机视觉·分类·卷积神经网络
leigm1234 小时前
深度学习使用Anaconda打开Jupyter Notebook编码
人工智能·深度学习·jupyter
浊酒南街6 小时前
决策树python实现代码1
python·算法·决策树