如何将回归模型的对数转换预测值与真实值还原为原始数值?
对数转换后预测结果的原始值还原方案
一、前期数据处理与模型流程回顾
1. 对数转换处理
对数据集dtd中的自变量wage_eur和因变量value_eur做非零值对数转换,代码如下:
mask = dtd['value_eur'] > 0 # 创建非零值布尔掩码 dtd['value_eur'] = np.log(dtd.loc[mask, 'value_eur']) # 仅对非零值应用对数转换 mass = dtd['wage_eur'] > 0 # 创建非零值布尔掩码 dtd['wage_eur'] = np.log(dtd.loc[mass, 'wage_eur']) # 仅对非零值应用对数转换
(注:原代码存在笔误,dtk应为dtd,wage_eur处理时误用了mask,已修正为对应掩码mass)
2. 构建预测变量
X = dtd.drop(['value_eur'], axis=1) y = dtd['value_eur']
3. 模型拟合与预测
regressor = gs.best_estimator_ regressor.fit(X_train, y_train) regs = regressor.predict(X_test) mae3 = mean_absolute_error(y_test, regs) print(f"Mean Absolute Error: {mae3}")
4. 输出的对数转换后结果
| grids | predicted values | true values |
|---|---|---|
| 60199 | 15.665110 | 15.761421 |
| 23743 | 12.557003 | 12.765688 |
| 58428 | 15.386219 | 15.424948 |
| 34538 | 15.588066 | 15.226498 |
| 108229 | 14.202580 | 14.457364 |
二、原始数值还原完整实现方法
由于前期使用自然对数(np.log)做转换,还原时只需对对数转换后的预测值和真实值应用指数函数np.exp()即可,具体实现如下:
1. 单独还原预测值与真实值
import numpy as np # 还原模型预测的对数结果为原始数值 original_preds = np.exp(regs) # 还原测试集真实值的对数结果为原始数值 original_trues = np.exp(y_test)
2. 结合结果表格批量还原
如果要将输出的结果表格直接还原为原始数值,可转为DataFrame后对指定列应用np.exp():
import pandas as pd # 假设结果表格已存入DataFrame df df = pd.DataFrame({ 'grids': [60199, 23743, 58428, 34538, 108229], 'predicted values': [15.665110, 12.557003, 15.386219, 15.588066, 14.202580], 'true values': [15.761421, 12.765688, 15.424948, 15.226498, 14.457364] }) # 对预测值和真实值列做指数还原 df['original_predicted'] = np.exp(df['predicted values']) df['original_true'] = np.exp(df['true values']) # 查看还原后的结果 print(df[['grids', 'original_predicted', 'original_true']])
注意事项
- 仅对前期做过对数转换的非零值数据应用还原,原数据中的零值未做对数转换,需保留原始零值;
- 若要评估原始数据的预测误差,需基于还原后的数值重新计算MAE:
original_mae = mean_absolute_error(original_trues, original_preds) print(f"原始数值的Mean Absolute Error: {original_mae}")
内容的提问来源于stack exchange,提问作者Samuel Osaghae
相关产品推荐
相关产品推荐

