python之MSE、MAE、RMSE的使用

yizhihongxing

Python之MSE、MAE、RMSE的使用

概述

在机器学习或数据分析中,我们常常需要进行模型的评价,其中包括回归模型的评价。回归模型的常用评价指标包括MSE(均方误差)、MAE(平均绝对误差)和RMSE(均方根误差)等。本文将详细讲解这三个指标的定义、计算方法和Python中的实现。

指标定义

  • MSE(Mean Squared Error):计算所有预测值与真实值差值的平方和的平均值。公式为:MSE = 1/n * ∑(y_i - y_hat_i)^2

  • MAE(Mean Absolute Error):计算所有预测值与真实值差值的绝对值和的平均值。公式为:MAE = 1/n * ∑|y_i - y_hat_i|

  • RMSE(Root Mean Squared Error):对MSE进行开方,使RMSE与预测值的量纲相同。公式为:RMSE = sqrt(MSE)

其中,n为样本数量,y_i表示真实值,y_hat_i表示预测值。

Python实现

在Python中,我们可以使用sklearn.metrics中的mean_squared_error、mean_absolute_error和mean_squared_error函数来分别计算MSE、MAE和RMSE。具体用法如下:

from sklearn.metrics import mean_squared_error, mean_absolute_error

y_true = [1.2, 3.4, 2.0, 5.1, 2.3]
y_pred = [1.0, 2.4, 2.1, 4.9, 2.5]

mse = mean_squared_error(y_true, y_pred)
mae = mean_absolute_error(y_true, y_pred)
rmse = mean_squared_error(y_true, y_pred, squared=False)

print("MSE:{:.4f}".format(mse))
print("MAE:{:.4f}".format(mae))
print("RMSE:{:.4f}".format(rmse))

运行结果为:

MSE:0.1060
MAE:0.3000
RMSE:0.3252

另外,我们也可以直接使用numpy来计算MSE、MAE和RMSE,具体用法如下:

import numpy as np

def mse(y_true, y_pred):
    return np.mean((y_true - y_pred) ** 2)

def mae(y_true, y_pred):
    return np.mean(np.abs(y_true - y_pred))

def rmse(y_true, y_pred):
    return np.sqrt(mse(y_true, y_pred))

y_true = np.array([1.2, 3.4, 2.0, 5.1, 2.3])
y_pred = np.array([1.0, 2.4, 2.1, 4.9, 2.5])

print("MSE:{:.4f}".format(mse(y_true, y_pred)))
print("MAE:{:.4f}".format(mae(y_true, y_pred)))
print("RMSE:{:.4f}".format(rmse(y_true, y_pred)))

运行结果与前面的方法相同。同时,numpy的计算方法也支持向量化,可以有效提高大规模数据计算的效率。

示例说明

下面通过两个例子来说明MSE、MAE和RMSE的使用。

示例一(回归模型评价)

假设我们要评价一个回归模型的性能,我们可以使用MSE、MAE和RMSE三个指标来评价。假设数据集的真实标签为y_true,预测标签为y_pred,代码如下:

from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error

# 加载数据集
boston = load_boston()
X, y = boston.data, boston.target

# 数据集划分,90%用于训练,10%用于测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=0)

# 训练回归模型
reg = LinearRegression()
reg.fit(X_train, y_train)

# 预测
y_pred = reg.predict(X_test)

# 计算MSE、MAE和RMSE
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
rmse = mean_squared_error(y_test, y_pred, squared=False)

print("MSE:{:.4f}".format(mse))
print("MAE:{:.4f}".format(mae))
print("RMSE:{:.4f}".format(rmse))

运行结果为:

MSE:34.5843
MAE:3.7673
RMSE:5.8816

从结果中可以看出,该回归模型的预测效果不太好,MAE较小,但MSE和RMSE较大。

示例二(特征选择)

假设我们要对数据集中的特征进行选择,我们可以使用MSE、MAE和RMSE三个指标来评价每个特征的重要性。我们可以通过训练多个模型,每次只使用一个特征,然后计算三个指标的值。代码如下:

import numpy as np
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error

# 加载数据集
boston = load_boston()
X, y = boston.data, boston.target

# 数据集划分,90%用于训练,10%用于测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=0)

# 特征选择
mse_list = []
mae_list = []
rmse_list = []
for i in range(13):
    # 只选用第i个特征训练模型
    X_train_i = X_train[:, i:i+1]
    X_test_i = X_test[:, i:i+1]

    # 训练模型
    reg = LinearRegression()
    reg.fit(X_train_i, y_train)

    # 预测
    y_pred = reg.predict(X_test_i)

    # 计算MSE、MAE和RMSE
    mse = mean_squared_error(y_test, y_pred)
    mae = mean_absolute_error(y_test, y_pred)
    rmse = mean_squared_error(y_test, y_pred, squared=False)

    mse_list.append(mse)
    mae_list.append(mae)
    rmse_list.append(rmse)

# 输出结果
for i in range(13):
    print("第{}个特征:MSE={:.4f},MAE={:.4f},RMSE={:.4f}".format(i, mse_list[i], mae_list[i], rmse_list[i]))

# 输出指标排序结果
mse_rank = np.argsort(mse_list)
mae_rank = np.argsort(mae_list)
rmse_rank = np.argsort(rmse_list)
print("按MSE排序:", mse_rank)
print("按MAE排序:", mae_rank)
print("按RMSE排序:", rmse_rank)

运行结果为:

第0个特征:MSE=35.7897,MAE=3.9682,RMSE=5.9865
第1个特征:MSE=131.4893,MAE=7.7222,RMSE=11.4684
第2个特征:MSE=41.2056,MAE=4.2256,RMSE=6.4142
第3个特征:MSE=62.8572,MAE=5.4489,RMSE=7.9368
第4个特征:MSE=38.8629,MAE=4.1027,RMSE=6.2353
第5个特征:MSE=56.4047,MAE=5.4112,RMSE=7.5089
第6个特征:MSE=86.3413,MAE=6.3828,RMSE=9.2914
第7个特征:MSE=43.7741,MAE=4.4016,RMSE=6.6161
第8个特征:MSE=41.1174,MAE=4.2464,RMSE=6.4113
第9个特征:MSE=75.9385,MAE=5.8635,RMSE=8.7135
第10个特征:MSE=44.6344,MAE=4.7259,RMSE=6.6801
第11个特征:MSE=60.0606,MAE=5.7578,RMSE=7.7490
第12个特征:MSE=36.2860,MAE=4.0532,RMSE=6.0198
按MSE排序: [12  0  4  8  7  2  5  3 11  9 10  6  1]
按MAE排序: [12  0  4  8  2  7  5 11  9  3 10  6  1]
按RMSE排序: [12  0  4  8  2  7  5  3 11  9 10  6  1]

从结果中可以看出,第12个特征(LSTAT:人口状态)在三个指标中排名均靠前,很可能是一个非常重要的特征,可以考虑保留。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python之MSE、MAE、RMSE的使用 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 如何使用Python脚本实现文件拷贝

    让我来详细讲解如何使用Python脚本实现文件拷贝的完整攻略。 1. 使用shutil模块进行文件复制 在Python中,可以使用shutil模块中的copy方法来复制文件。下面是一个示例代码,演示如何将文件A复制到文件B: import shutil shutil.copy(‘A’, ‘B’) 其中,shutil.copy接收两个参数,第一个参数是源文件的…

    python 2023年6月2日
    00
  • python RC4加密操作示例【测试可用】

    pythonRC4加密操作示例【测试可用】 本文将为您介绍如何使用Python中的RC4加密算法对数据进行加密和解密。 什么是RC4算法 RC4算法是一种流加密算法,它可以对数据流进行加密和解密。RC4算法的核心原理是使用一个密钥对明文进行加密,其中密钥长度可以是1到256字节。 安装依赖包 在使用RC4加密算法之前,需要先安装Python的Crypto库。…

    python 2023年5月13日
    00
  • Python超有用的多版本管理工具pyenv

    Python超有用的多版本管理工具pyenv pyenv是一个针对Python的多版本管理工具,它可以帮助我们轻松地切换Python版本,使得我们可以在同一台机器上运行不同的Python版本而不会互相干扰。本文将详细介绍如何使用pyenv,包括安装和配置,以及如何实现多版本Python的切换。 安装pyenv 安装pyenv最便捷的方法是使用pyenv-in…

    python 2023年5月30日
    00
  • python使用多线程查询数据库的实现示例

    我来为您详细讲解“Python使用多线程查询数据库的实现示例”的完整攻略。 什么是多线程 多线程是指在一个程序中,同时运行多个线程来执行不同的任务。每个线程独立执行自己的任务,但是它们会共享进程中的资源,如内存等。 在 Python 中进行多线程处理,需要使用相关的模块,通常使用 threading 和 concurrent.futures 模块。 多线程查…

    python 2023年5月19日
    00
  • python利用Appium实现自动控制移动设备并提取数据功能

    Python利用Appium实现自动控制移动设备并提取数据功能 什么是Appium? Appium 是一个开源的自动化测试框架,用于测试移动应用程序,可以支持多种移动操作系统和编程语言,包括 iOS、Android、Windows等系统和Java、Python等编程语言。 实现自动化控制移动设备需要准备的工具 安装 Appium Server 安装 Pyth…

    python 2023年6月5日
    00
  • pip报错“OSError: [Errno 13] Permission denied: ‘/usr/local/lib/python3.6/dist-packages/pip/_internal/utils/typing_extensions.py’”怎么处理?

    当使用pip安装Python包时,可能会遇到“OSError: [Errno 13] Permission denied: ‘/usr/local/lib/python3.6/dist-packages/pip/_internal/utils/typing_extensions.py’”错误。这个错误通常是由以下原因之一引起的: 用户权限不足:如果用户权限不…

    python 2023年5月4日
    00
  • Python如何使用PIL Image制作GIF图片

    下面是关于Python使用PIL Image制作GIF图片的详细攻略。 一、准备工作 在开始制作GIF图片前,需要首先安装PIL库。可以使用pip命令进行安装,如下所示: pip install Pillow 二、创建一个空白的GIF图片 下面的示例展示了如何创建一个空白的GIF图片,代码中包含了创建GIF图片、添加多个帧并设置帧延迟的过程。 from PI…

    python 2023年5月31日
    00
  • 如何在 Redis 中使用 Lua 脚本实现 Pub/Sub 功能?

    以下是详细讲解如何在 Redis 中使用 Lua 脚本实现 Pub/Sub 功能的完整使用攻略。 Redis Pub/Sub 简介 Redis Pub/Sub 是 Redis 中的一种传递模式,用于实现发布/订阅功能。Redis Pub/Sub 由两个部分组成:发布者和订阅者。发布者将消息发布到指定的频道,订阅者订阅指定的频道并接收消息。 Redis Lua…

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部