python之MSE、MAE、RMSE的使用

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:替换列表中的 \n \r \t,不包括以 \n\n 开头并以 \n\r\n\t 结尾的列表

    【问题标题】:Python: replace \n \r \t in a list excluding those starting \n\n and ends with \n\r\n\tPython:替换列表中的 \n \r \t,不包括以 \n\n 开头并以 \n\r\n\t 结尾的列表 【发布时间】:2023-04-03 00:32:01 【问题描述】…

    Python开发 2023年4月8日
    00
  • Python爬虫学习之翻译小程序

    Python爬虫学习之翻译小程序攻略 本攻略将介绍如何使用Python编写一个简单的翻译小程序,主要分为以下步骤: 确定翻译网站和网页结构 安装必要的Python库 编写Python代码实现翻译功能 完善程序并进行测试 1. 确定翻译网站和网页结构 在编写翻译程序之前,需要确定使用的翻译网站和该网站的网页结构。本攻略将使用有道翻译作为翻译网站,并以Chrom…

    python 2023年5月23日
    00
  •  Python列表的切片取值详解

    Python列表的切片取值详解 在Python中,列表是一种常用的数据结构,它可以存储任意类型的数据,并且支持动态扩展和缩。列表的切片操作是Python中常用的操作之一,它可以用来获取中的一部分元素。本文将详细讲Python列表的切片取值操作。 切片取值操作 Python中的切片操作可以来获取列表中的一部分元素,语法如下: lst[start:end:ste…

    python 2023年5月13日
    00
  • Python实现for循环倒序遍历列表

    在Python中,可以使用for循环来遍历列表中的元素。有时候,我们需要倒序遍历列表,即从后往前遍历。本文将详细讲解Python实现循环倒序遍历列表的方法。 方法一:使用reversed函数 在Python中,可以使用reversed函数来倒序遍历列表。下面是一个示例: # 示例1:使用reversed函数倒序遍历列表 lst = [1, 2, 3, 4, …

    python 2023年5月13日
    00
  • python print输出延时,让其立刻输出的方法

    让我们来详细讲解一下“python print输出延时,让其立刻输出的方法”。 通常情况下,我们在使用print()函数输出内容时,它会立即将内容打印到控制台上。但有时候,我们希望有一定的延迟才输出,这时可以使用Python中的flush和end参数或使用sys.stdout.flush()函数来实现输出的延迟。 下面是两个示例说明: 示例一:使用flush…

    python 2023年6月5日
    00
  • 人脸识别经典算法一 特征脸方法(Eigenface)

    人脸识别经典算法之一:特征脸方法(Eigenface)攻略 一、什么是特征脸(Eigenface)方法 特征脸(Eigenface)方法是一种常用的人脸识别方法,其思想核心是通过对一组人脸图像进行主成分分析(PCA),提取人脸图像的主要特征信息,即所谓的特征脸,从而实现人脸图像的快速识别。该方法是基于图像本身的统计特性进行数据降维,提取人脸的最主要特征并进行…

    python 2023年5月14日
    00
  • python的链表基础知识点

    Python的链表基础知识点 链表的定义 链表是一种常见的数据结构,它的节点包含两个部分:数据和指向下一个节点的指针。链表的最后一个节点指向None。 Python中链表的定义可以使用class来实现。例如定义一个链表节点的类: class ListNode: def __init__(self, x): self.val = x self.next = N…

    python 2023年5月14日
    00
  • Python实现模拟浏览器请求及会话保持操作示例

    Python实现模拟浏览器请求及会话保持操作示例 在Python中,我们可以使用requests库来模拟浏览器请求,并使用session来保持会话状态。本文将详细讲解如何使用Python实现模拟浏览器请求及会话保持操作,并提供两个示例。 环境配置 在使用Python实现模拟浏览器请求及会话保持操作时,我们需要安装requests库。可以使用pip命令来安装r…

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