
本文旨在详细阐述在机器学习模型中,如何将经过对数转换的预测结果还原为原始数据尺度。当数据因偏态分布等原因进行对数变换后,模型预测值将处于对数尺度。通过使用指数函数`np.exp()`,可以有效地将这些预测值逆变换回原始可解释的数值,并探讨在评估模型性能时,如何正确处理不同尺度下的误差计算。
在数据分析和机器学习领域,对数转换是一种常用的数据预处理技术,尤其适用于处理具有偏态分布的数值型特征,如收入、价格或销售额等。通过对数转换,可以使数据分布更接近正态分布,从而满足某些模型(如线性回归)对数据分布的假设,提高模型的稳定性和预测性能。
对数转换通常应用于目标变量(因变量)或某些独立变量(自变量),以解决数据偏斜、方差不齐或建立线性关系等问题。例如,当处理财务数据时,如商品价值或工资,这些数据往往呈现右偏分布,即大部分数值较小,少数数值非常大。对数转换可以有效压缩大数值的范围,拉伸小数值的范围,使数据分布更加均匀。
以下代码片段展示了如何对数据集中的value_eur和wage_eur两列进行自然对数转换:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
# 假设 dtd 是您的 DataFrame,dtk 是原始 DataFrame
# 为了演示,我们创建一个模拟数据
data = {
'value_eur': np.random.exponential(scale=100000, size=1000) + 1, # 加1避免log(0)
'wage_eur': np.random.exponential(scale=50000, size=1000) + 1,
'feature1': np.random.rand(1000) * 100,
'feature2': np.random.rand(1000) * 50
}
dtd = pd.DataFrame(data)
dtk = dtd.copy() # 模拟原始数据
# 对非零值进行对数转换
mask_value = dtd['value_eur'] > 0
dtd.loc[mask_value, 'value_eur'] = np.log(dtk.loc[mask_value, 'value_eur'])
mask_wage = dtd['wage_eur'] > 0
dtd.loc[mask_wage, 'wage_eur'] = np.log(dtk.loc[mask_wage, 'wage_eur'])
# 定义特征X和目标y
X = dtd.drop(['value_eur'], axis=1)
y = dtd['value_eur']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 假设 regressor 是一个已经训练好的模型,例如通过 GridSearchCV 获得的最佳估计器
# 这里使用一个简单的 RandomForestRegressor 作为示例
from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(random_state=42)
regressor.fit(X_train, y_train)在上述代码中,value_eur和wage_eur被转换成了它们的自然对数值。这意味着模型在训练时,学习的是输入特征与目标变量的对数值之间的关系。
当模型(如regressor)在对数转换后的目标变量y_train上进行训练并对X_test进行预测时,其输出regs也将是对数尺度的值。
# 进行预测
regs = regressor.predict(X_test)
# 打印对数尺度的预测值和真实值(y_test本身也是对数尺度)
results1 = pd.DataFrame({ ' grids predicted values': regs, ' true values': y_test})
print("对数尺度的预测结果示例:")
print(results1.head())输出示例(注意这些值都比较小,因为它们是对数):
对数尺度的预测结果示例:
grids predicted values true values
10 11.080183 10.875322
285 10.744265 10.605335
689 11.137885 11.178312
603 11.066421 11.060205
808 11.233591 11.232517这些对数尺度的预测值对于直接解释或与原始业务场景中的实际数值进行比较来说,并不直观。例如,一个对数值为15的预测,实际可能代表一个非常大的金额。因此,为了更好地理解模型的预测结果,需要将其还原到原始的数据尺度。
芦笋演示
一键出成片的录屏演示软件,专为制作产品演示、教学课程和使用教程而设计。
227
查看详情
将对数转换后的值还原为原始尺度,需要使用对数函数的逆运算——指数函数。在Python的NumPy库中,np.exp()函数用于计算e的幂次方,即自然指数函数,它正是自然对数np.log()的逆运算。
要将模型的对数尺度预测值regs还原为原始尺度,只需对regs应用np.exp()函数即可:
# 将预测值从对数尺度还原到原始尺度
y_pred_original_scale = np.exp(regs)
# 将测试集真实值从对数尺度还原到原始尺度
y_test_original_scale = np.exp(y_test)
# 创建包含原始尺度预测值和真实值的DataFrame
results_original = pd.DataFrame({
'预测值 (原始尺度)': y_pred_original_scale,
'真实值 (原始尺度)': y_test_original_scale
})
print("\n原始尺度的预测结果示例:")
print(results_original.head())输出示例(现在的值更大,更接近原始数据的数值范围):
原始尺度的预测结果示例:
预测值 (原始尺度) 真实值 (原始尺度)
10 65538.214081 52870.970878
285 46376.425832 40348.435850
689 68715.753334 71578.473796
603 64003.552943 63595.340942
808 75592.578643 75510.672323误差指标的计算尺度一致性 在评估模型性能时,选择合适的误差计算尺度至关重要。
mae_log_scale = mean_absolute_error(y_test, regs)
print(f"\n对数尺度的平均绝对误差 (MAE): {mae_log_scale:.4f}")mae_original_scale = mean_absolute_error(y_test_original_scale, y_pred_original_scale)
print(f"原始尺度的平均绝对误差 (MAE): {mae_original_scale:.2f}")请注意,直接对对数尺度下的MAE进行np.exp()操作是不正确的,因为对数转换是非线性的,exp(MAE_log)不等于MAE_original。
数据预处理的一致性 确保在训练集、测试集以及任何新的预测数据上,对数转换和逆变换的逻辑保持一致。如果原始数据中存在零或负值,而对数函数只对正数有定义,那么在进行对数转换前需要进行适当的零值处理(例如加一个很小的常数,如np.log(x + 1))。在逆变换时,np.exp(x)的结果总是正数,这与原始数据中不可能出现负值的情况是吻合的。
模型选择与对数转换 某些模型(如广义线性模型中的泊松回归)可以直接处理计数数据,而不必进行对数转换。然而,对于大多数基于正态性假设的模型,对数转换仍然是处理偏态数据的有效手段。在进行对数转换后,模型实际上是在预测目标变量的相对变化,而不是绝对变化,这在某些业务场景下可能更有意义。
对数转换是处理偏态数据和改善模型性能的强大工具。然而,为了使模型的预测结果具有实际意义和可解释性,将对数尺度的预测值逆变换回原始尺度是必不可少的步骤。通过简单地应用np.exp()函数,我们可以轻松实现这一目标。同时,在评估模型时,务必根据分析需求选择在对数尺度还是原始尺度下计算误差指标,并确保所有数据处理步骤的一致性,以得出准确且有意义的结论。
以上就是机器学习中对数转换预测值的逆变换方法的详细内容,更多请关注其它相关文章!
# 在对
# 白城关键词排名优化
# 贵州b站关键词排名团队
# 山东关键词排名怎么选
# 改关键词排名就掉了
# 铜陵百度seo优化
# 杭州柏悦酒店营销推广
# 合肥seo推广如何操作
# 营销推广全案报价表
# 雨花区软文营销推广公司
# 安阳官网网站优化费用
# 较小
# python
# 几种
# 可以直接
# 浮点
# 原为
# 换回
# 原始数据
# 指数函数
# 逆变
# red
# ai
# 工具
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】
《全民k歌》音乐怎么下载到本地2025
荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复
猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法
响应式设计中动态背景颜色条的实现指南
多闪APP官方下载安装入口_多闪最新版本获取入口
Teambition网盘如何共享文件
win11关机几秒又自己开机 Win11关机自动重启问题修复
《理想汽车》权限管理设置方法
深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析
快手极速版在线体验区 快手极速版网页体验入口
百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法
哔哩哔哩黑名单怎么查看
《下一站江湖2》心法融合技巧
苹果自助维修计划支持哪些设备机型
电子白板帮助菜单使用指南
《浙里办》电子发票开具方法
海棠阅读网页版_进入海棠网页版在线阅读中心
汽水音乐官方网站登录入口_汽水音乐网页版进入链接
WooCommerce 新客户订单自动添加管理员备注教程
search中maxlength属性用法解析
解决CSS布局中意外顶部空白问题的教程
Mac hosts文件在哪里_Mac修改hosts文件详细教程
Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解
《猎聘》筛选猎头岗位方法
安居客移动经纪人怎么设置自动回复?-安居客移动经纪人设置自动回复的方法
《洛克王国:世界》国家队搭配攻略
VS Code的时间线(Timeline)视图:您的代码时光机
酷狗音乐多音轨设置教程
《顺丰同城骑士》查看我的技能方法
《雷电模拟器》截图方法介绍
《虎扑》取消评分记录方法
服装短视频如何起号推广?服装短视频起号推广有什么要求?
Python定时发送QQ消息
网站体验不好=浪费钱:如何提升-用户体验效果差
mysql数据库索引类型有哪些_mysql索引类型解析
《大润发优鲜》充值方法介绍
我居然低估了 DeepSeek,这次更新它做到了这些!
鸿蒙单条备忘录如何加密
Python中处理嵌套字典与列表的数据提取与过滤教程
J*aScript装饰器_元编程实战
Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
快递查询,一键速查
键盘保修需要什么_键盘售后维修流程
J*aScript二进制处理_ArrayBuffer与Blob
喜茶GO更换登录账号方法
《虎扑》关闭社区内容推荐方法
如何配置VS Code作为您Git操作的默认编辑器
C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别
2025-12-05
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。