Python中是否有Sklearn函数可从平均绝对误差计算标准差?
如何用Scikit-learn计算MAE的标准差?
问题背景
希望找到Scikit-learn中的工具,自动计算从该库得到的平均绝对误差(MAE)的标准差。以下是示例代码:
示例数据集
import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor from sklearn.datasets import make_regression df = { "a": [0.06 , 0.07, 0.45, 0.98, 0.97 ], "b": [12,45,65, 56, 34], "c": [2,5,5, 5, 3], "d": [23,55,25, 15, 34], "e": [0.0005,0.55555,0.383825, 0.4747477415, 0.348344334], "f": [0.0236 , 0.3407, 0.4545, 0.9658, 0.4597 ], "g": [70 , 90, 123, 154, 99 ], } # 加载为DataFrame df = pd.DataFrame(df) print(df)
机器学习模型代码
X = df.iloc[:, 0:6] y = df.iloc[:, 6] X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.5,random_state = 0) model = RandomForestRegressor(n_estimators=100, criterion='absolute_error', random_state=0)
MAE计算代码
from sklearn.metrics import mean_absolute_error model.fit(X_train, y_train) # 生成测试集预测结果 preds = model.predict(X_test) # 计算MAE score = mean_absolute_error(y_test, preds) print('The mean absolute error is:', score) preds_val = model.predict(X_test)
解决方案
Scikit-learn没有直接计算MAE标准差的函数,但可以通过以下两种方式实现:
方法1:通过交叉验证获取多组MAE后计算标准差
利用cross_val_score进行交叉验证,得到多组MAE值,再计算这些值的标准差,能反映模型在不同数据划分下的MAE波动情况:
from sklearn.model_selection import cross_val_score # 执行5折交叉验证,获取负MAE(sklearn评分函数默认最大化指标) cv_scores = cross_val_score(model, X, y, cv=5, scoring='neg_mean_absolute_error') # 转换为正MAE mae_scores = -cv_scores # 计算MAE的标准差 mae_std = np.std(mae_scores) print(f"交叉验证MAE均值: {np.mean(mae_scores):.2f}") print(f"MAE的标准差: {mae_std:.2f}")
方法2:计算单个样本绝对误差的标准差
先计算每个测试样本的绝对误差,再求这些误差的标准差,代表预测误差的离散程度:
# 计算每个样本的绝对误差 absolute_errors = np.abs(y_test - preds) # 计算误差的标准差 error_std = np.std(absolute_errors) print(f"测试集单个样本绝对误差的标准差: {error_std:.2f}")
内容的提问来源于stack exchange,提问作者Shu
相关产品推荐
相关产品推荐

