新闻中心
机器学习中对数转换预测值的还原方法

本文将详细介绍在机器学习模型中,如何将经过对数转换(np.log)的因变量预测结果准确地还原回原始数值尺度。通过使用指数函数np.exp(),我们不仅能正确评估模型在原始数据上的性能,还能使预测结果更具实际意义和可解释性。教程涵盖了从数据转换、模型训练到最终逆变换及结果展示的全过程,并强调了逆变换在模型评估中的重要性。
1. 理解对数转换及其应用场景
在数据预处理阶段,对数转换(如自然对数 np.log())是机器学习中常用的技术,尤其适用于以下情况:
- 处理偏态分布数据:当数据呈现严重的右偏态(长尾)时,对数转换可以使其分布更接近正态分布,从而满足某些模型(如线性回归)对数据分布的假设。
- 稳定方差:对数转换有助于减小数据中的异方差性,使误差项的方差更稳定。
- 减小异常值影响:对数转换可以压缩极端值,降低异常值对模型训练的影响。
在进行对数转换时,通常需要确保原始数值为正。如果存在非正值,需要进行适当的处理(例如,加一个小的常数使所有值大于零,或者只对正值进行转换)。
示例:对独立变量和因变量进行对数转换
假设我们对数据集 dtd 中的 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的副本或原始数据
# 为了演示,我们创建一个示例 DataFrame
data = {
'value_eur': [1000, 25000, 500, 75000, 100, 120000, 3000, 80000, 200, 45000],
'wage_eur': [100, 2500, 50, 7500, 10, 12000, 300, 8000, 20, 4500],
'feature1': np.random.rand(10) * 100,
'feature2': np.random.rand(10) * 50
}
dtd = pd.DataFrame(data)
dtk = dtd.copy() # 假设 dtk 是原始数据
# 对正值进行对数转换
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'])
print("对数转换后的数据示例:")
print(dtd.head())2. 模型训练与预测
在对数据进行对数转换后,我们使用这些转换后的数据来训练机器学习模型。模型的输出(预测值)也将处于对数尺度。
示例:定义特征和目标,训练模型并进行预测
拾贝
一键同步微信读书所有笔记和划线,并在新标签页回顾
186
查看详情
# 定义特征 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)
# 进行预测,预测结果 regs 处于对数尺度
regs = regressor.predict(X_test)
print("\n模型预测结果 (对数尺度):")
print(regs)3. 将预测值还原至原始尺度
模型的预测结果 regs 是对数转换后的值。为了使这些预测结果具有实际意义,并能与原始数据的真实值进行直接比较,我们需要将它们还原回原始尺度。对数转换的逆运算是指数运算,即 np.exp() 函数。
示例:使用 np.exp() 还原预测值
# 将对数尺度的预测值还原为原始尺度
y_pred_original = np.exp(regs)
print("\n还原后的预测值 (原始尺度):")
print(y_pred_original)4. 评估模型与展示结果
在还原预测值后,我们通常需要:
- 将真实值也还原到原始尺度:为了在原始尺度上进行准确的模型评估(如计算 MAE、RMSE),测试集中的真实值 y_test 也需要通过 np.exp() 还原。
- 计算原始尺度的评估指标:使用还原后的预测值和真实值来计算评估指标。
- 展示原始尺度的预测结果和真实值:创建一个包含原始尺度预测值和真实值的 DataFrame,以便直观比较。
示例:计算原始尺度 MAE 并展示结果
# 将测试集真实值也还原为原始尺度,以便进行公平比较和评估 y_test_original = np.exp(y_test) # 计算原始尺度的平均绝对误差 (MAE) mae_original = mean_absolute_error(y_test_original, y_pred_original) print(f"\n原始尺度的平均绝对误差 (MAE): {mae_original:.2f}") # 创建一个 DataFrame 来展示原始尺度的预测值和真实值 results_original = pd.DataFrame({ '预测值 (原始尺度)': y_pred_original, '真实值 (原始尺度)': y_test_original }) print("\n原始尺度下的预测值与真实值对比:") print(results_original.head())
5. 注意事项
- 数据一致性:在进行逆转换时,确保对预测值和用于评估的真实值都进行相同的逆转换操作。否则,评估指标将失去意义。
- 零值处理:如果原始数据中包含零或负值,并且在对数转换前进行了加常数处理(例如 np.log(x + C)),那么逆转换时也需要进行相应的减常数处理 (np.exp(y_pred) - C)。
- 评估指标的选择:在对数尺度上,RMSE 或 MAE 衡量的是对数误差;在原始尺度上,它们衡量的是绝对误差。根据业务需求和模型目标选择合适的评估尺度。
- 数值稳定性:np.exp() 函数对非常大的输入值可能会产生溢出(inf)。虽然在大多数实际应用中不常见,但在处理极端预测值时需要注意。
- 可解释性:将预测结果还原到原始尺度极大地提高了模型的可解释性,使非专业人士也能理解模型的预测效果。
总结
在机器学习流程中,对数转换是一种有效的数据预处理技术,但它要求我们对模型的预测结果进行逆转换,才能将其还原到原始数据的尺度。通过熟练运用 np.exp() 函数,我们不仅能够获得具有实际意义的预测值,还能在原始数据层面对模型性能进行准确评估。掌握这一技能对于构建和部署实用的机器学习模型至关重要。
以上就是机器学习中对数转换预测值的还原方法的详细内容,更多请关注其它相关文章!
# 进行了
# 免费推广网站平台排名
# 会展场馆网站建设流程
# 佛山网站建设求职简历
# 江苏seo排名有价值吗
# 阿拉山口网站优化
# 泰顺建设网站首页查询
# 网站课程怎么样推广好做
# 推广小程序怎么测试营销
# 白山seo入门如何做
# 香港seo哪家专业
# ai
# 无需注册
# 如何用
# 在对
# 实际意义
# 创建一个
# 离线
# 拾贝
# 的是
# 原始数据
# red
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
深入理解J*a合成构造器:何时以及为何阻止其生成
优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法
Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑
内存检查:在VS Code中调试C++时的内存视图
jQuery Mask 插件中实现电话号码固定前导零的教程
J*aScript对象创建方式_J*aScript设计模式应用
Pandas DataFrame:高效添加条件计算列
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】
苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看
KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明
红果短剧网页版官网入口 官方最新网址发布
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
在Go Martini框架中高效服务动态生成图像的实践指南
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
Python中如何避免重复条件判断:利用数据结构实现动态逻辑
Mac怎么锁定备忘录_Mac备忘录加密设置教程
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
b站如何看历史记录_b站观看历史找回方法
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
动漫花园资源网使用步骤_动漫花园资源网下载流程
在WordPress中通过REST API获取BasicAuth保护的远程文章
c++项目目录结构应该如何组织_c++工程化项目结构规范
将HTML Canvas内容转换为可上传的图像文件(File对象)
Python异步编程实践:使用Binance API构建实时交易数据流
C++如何实现异步操作_C++11使用std::future和std::async进行异步编程
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
解决Tabulator日期时间排序问题的专业指南
1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】
Golang如何使用new_Go new分配内存机制讲解
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
葱吃多了会怎样 葱吃多了会伤胃吗
b站怎么删除评论_b站评论管理与删除操作
Web Components中自定义开关组件状态同步的常见陷阱与解决方案
微博网页版官方账号登录 微博网页版内容浏览使用指南
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法
Lar*el递归关系中排除子孙节点的策略
Pygame教程:解决用户输入与游戏状态更新不同步问题
如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践


2025-12-13
浏览次数:次
返回列表
ot;\n原始尺度的平均绝对误差 (MAE): {mae_original:.2f}")
# 创建一个 DataFrame 来展示原始尺度的预测值和真实值
results_original = pd.DataFrame({
'预测值 (原始尺度)': y_pred_original,
'真实值 (原始尺度)': y_test_original
})
print("\n原始尺度下的预测值与真实值对比:")
print(results_original.head())