如何在Pandas中计算MAE(平均绝对误差)及相关修正指标?
解决方案
这里是完全贴合你给出公式的代码实现:
import pandas as pd from typing import Tuple def information_loss(df: pd.DataFrame, df_protected: pd.DataFrame) -> Tuple[float, float]: # 计算原始数据与受保护数据的MAE n, d = df.shape absolute_diff = df.subtract(df_protected).abs() mae = absolute_diff.sum().sum() / (n * d) # 计算相关矩阵的MAE-corr df_cor = df.corr() df_protected_cor = df_protected.corr() corr_absolute_diff = df_cor.subtract(df_protected_cor).abs() mae_corr = corr_absolute_diff.sum().sum() / (d ** 2) return mae, mae_corr # 调用示例(假设你已定义df1和df1_noise_1) mae_result, mae_corr_result = information_loss(df1, df1_noise_1) print(f"MAE: {mae_result:.4f}") print(f"MAE-corr: {mae_corr_result:.4f}")
关键步骤解释
- 数据MAE计算:
- 用
df.subtract(df_protected)计算两个数据框对应元素的差值,再通过.abs()取绝对值 - 两次调用
.sum():第一次按列求和,第二次将所有列的总和相加,得到所有元素的绝对差总和 - 最后除以总元素数
n*d(n为行数,d为列数),得到平均绝对误差
- 用
- 相关矩阵MAE-corr计算:
- 分别对原始数据框和受保护数据框调用
.corr(),生成各自的相关矩阵 - 重复差值取绝对值、求和的操作,得到相关矩阵元素的绝对差总和
- 最后除以相关矩阵的总元素数
d²(相关矩阵为d×d维度),得到MAE-corr
- 分别对原始数据框和受保护数据框调用
- 函数通用性优化:替换原代码中的全局变量为函数参数,让函数可以复用在任意一对原始/受保护数据框上
内容的提问来源于stack exchange,提问作者Geralt_P
相关产品推荐
相关产品推荐

