You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:22:45