机器学习中对数变换预测结果的反向还原


机器学习中对数变换预测结果的反向还原

本文旨在详细阐述在机器学习模型中,如何将经过对数变换(logarithmic transformation)处理后的预测结果准确地还原回原始数值尺度。我们将探讨对数变换的目的、模型训练与预测过程,并重点讲解使用指数函数(`np.exp()`)进行反向变换的方法,同时强调在评估模型性能时,确保预测值和真实值处于相同尺度下的重要性。

1. 对数变换的背景与目的

在机器学习实践中,数据预处理是至关重要的一步。当目标变量(或某些特征)呈现高度偏斜分布(如长尾分布)时,直接用于模型训练可能会导致模型性能下降,例如线性模型可能难以捕捉非线性关系,或违反某些统计假设。对数变换是一种常用的技术,它通过将数据映射到对数空间来:

  • 减小数据偏斜: 使数据分布更接近正态分布,有助于满足某些模型的假设。
  • 稳定方差: 对于方差随均值增大的数据,对数变换可以使其方差更加稳定。
  • 处理异常值: 压缩极端值的影响,使模型对异常值不那么敏感。
  • 将乘性关系转化为加性关系: 在某些经济或生物学模型中,这有助于简化模型。

以下代码片段展示了如何对数据集中的特定列进行对数变换,同时处理非正值的情况:

import numpy as np
import pandas as pd
from sklearn.metrics import mean_absolute_error

# 假设 dtk 是原始DataFrame,dtd 是将要进行变换的DataFrame
# 为演示目的,我们创建一个模拟的 dtk 和 dtd
dtk_data = {
    'value_eur': [1000, 20000, 500000, 15000, 300000, 0, 500],
    'wage_eur': [500, 10000, 250000, 7500, 150000, 0, 250],
    'other_feature': [10, 20, 30, 15, 25, 5, 12]
}
dtk = pd.DataFrame(dtk_data)
dtd = dtk.copy() # dtd 将用于存储变换后的数据

# 对 'value_eur' 和 'wage_eur' 进行对数变换
# 注意:np.log() 只能处理正数,因此需要先过滤掉非正值
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. 模型训练与预测

在数据经过对数变换后,我们使用这些变换后的数据来训练机器学习模型。例如,如果 value_eur 是我们的目标变量 y,并且我们对其进行了对数变换,那么模型将学习预测 log(value_eur)。

以下是模型训练和预测的示例流程:

SuperDesign SuperDesign

开源的UI设计AI智能体

SuperDesign 216 查看详情 SuperDesign
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor # 假设使用随机森林回归器
from sklearn.model_selection import GridSearchCV

# 准备 X 和 y
X = dtd.drop(['value_eur'], axis=1)
y = dtd['value_eur']

# 过滤掉因为对数变换而可能产生的 NaN/inf 值(如果原始数据包含0或负数)
# 在实际应用中,需要更完善的 NaN 处理策略
valid_indices = y.notna() & X.notna().all(axis=1)
X = X.loc[valid_indices]
y = y.loc[valid_indices]

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 假设 gs.best_estimator_ 已经通过 GridSearchCV 获得
# 这里我们直接实例化一个回归器作为示例
regressor = RandomForestRegressor(random_state=42)

# 训练模型
regressor.fit(X_train, y_train)

# 在测试集上进行预测
regs = regressor.predict(X_test)

# 此时 regs 中的值是 log-transformed 的预测值
print("\nLog-transformed 预测值 (部分):")
print(regs[:5])
print("\nLog-transformed 真实值 (部分):")
print(y_test.head())

3. 预测结果的反向变换

模型预测出的 regs 是目标变量的对数变换值。为了获得原始尺度的预测值,我们需要执行反向变换。对数变换的逆运算是指数函数,即 exp(log(x)) = x。在 NumPy 中,这可以通过 np.exp() 函数实现。

重要提示: 当计算评估指标(如 MAE, RMSE)时,如果希望在原始数据尺度上进行评估,则预测值和真实值都必须还原到原始尺度。仅仅还原预测值而真实值仍是对数变换后的,会导致评估结果的偏差和误解。

# 将预测值从对数尺度还原到原始尺度
y_pred_original_scale = np.exp(regs)

# 将测试集真实值从对数尺度还原到原始尺度,以便进行公平的评估和比较
y_test_original_scale = np.exp(y_test)

# 计算在原始尺度上的平均绝对误差 (MAE)
mae_original_scale = mean_absolute_error(y_test_original_scale, y_pred_original_scale)

print(f"\n原始尺度上的平均绝对误差 (MAE): {mae_original_scale:.2f}")

# 结果展示
results_original_scale = pd.DataFrame({
    '预测值 (原始尺度)': y_pred_original_scale,
    '真实值 (原始尺度)': y_test_original_scale
})

print("\n预测结果与真实值 (原始尺度,部分):")
print(results_original_scale.head())

4. 注意事项与总结

  1. 一致性是关键: 确保在模型训练前对目标变量进行了对数变换,那么在预测后也必须进行指数反向变换。同时,在计算基于原始尺度的评估指标时,真实值也需要进行相应的反向变换。
  2. 零值和负值的处理: 对数函数只对正数有定义。在进行对数变换前,务必处理好数据中的零值或负值。常见方法包括:
    • 加常数: 对所有值加上一个小的正数(如 np.log(x + 1)),尤其适用于数据中包含零的情况。
    • 过滤: 如示例所示,只对正值进行变换,并对非正值进行单独处理或排除。
    • 分段变换: 对不同范围的值采用不同的变换策略。
  3. 评估指标的选择: 如果模型在对数尺度上训练,其优化目标也是在对数尺度上的误差。这意味着模型可能在对数尺度上表现良好,但在原始尺度上,尤其是在高值区域,误差可能会被放大。因此,同时观察对数尺度和原始尺度上的评估指标是明智的。例如,MAE在原始尺度上更直观,而RMSE在对数尺度上可能更稳定。
  4. 解释性: 将预测结果还原到原始尺度,使得模型预测值更具业务可解释性,方便与领域专家沟通和实际应用。

通过上述步骤,我们可以确保在机器学习模型中使用对数变换时,不仅能利用其优点改善模型性能,还能准确地将预测结果还原到原始业务含义的尺度,从而进行正确的解释和评估。

以上就是机器学习中对数变换预测结果的反向还原的详细内容,更多请关注其它相关文章!


# 正态分布  # 金华网站推广便宜  # 哈尔滨关键词排名怎么样  # 元氏市场网站推广好处  # 南宁移动端seo  # 宁远租房网站建设文案  # 杜镇专业网站建设  # seo教学免费课程seo博客  # 建瓯营销推广招聘网  # 天马行空近义词网站建设  # 唐山网站建设品牌大全  # ai  # 过滤掉  # 职业发展  # 如何应对  # 进行了  # 只对  # 在对  # 指数函数  # 官网  # 验证码  # red 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Dash应用中自定义HTML页面标题与网站图标(F*icon)的实用指南  J*aScript模拟悬停与点击:自动化网页动态元素交互指南  原子笔记app误删找回教程  B站怎么快速升级 B站用户等级提升攻略【详解】  《淘票票》添加到苹果钱包教程  firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接  优化Google Charts Gauge:在数据库无数据时显示默认值  C++二维数组动态分配方法_C++指针与数组内存布局  《书耽》更换手机号方法  C++ bind函数使用教程_C++参数绑定与函数适配器的应用  作业帮网页版不用下载入口 在线问老师快速答疑  邦丰播放器频道搜索设置  J*aScript实现网页表单实时输入字段比较与验证教程  XPath动态元素定位:如何精准选择文本内容变化的元素  GBA模拟器手柄按键设置  mysql中如何分析索引使用情况_mysql索引使用分析方法  如何定制PrimeNG Sidebar的背景颜色  百度网盘如何设置上传限额  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  《随手记》启用语音备注方法  汽车之家网页版免费登录_汽车之家官网首页直接进入  AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用  韩剧圈正版官网入口_韩剧圈官方指定登录  抖音团长模式怎么做?团长模式是什么意思?  MongoDB聚合管道:高效统计列表中各项的文档数量  NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现  解决J*aScript动态图片上传中ID重复问题:在同一页面显示多张独立图片  《鹿路通》退余额方法  PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素  iCloud官方网站 iCloud网页版在线登录入口  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  《美篇》取消会员自动续费方法  b站如何管理订阅_b站订阅标签分类管理  飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案  快递物流路径揭秘  研招网官方网站招生平台入口_中国研究生招生信息网官网登录  智慧团建活动报名入口 智慧团建活动报名入口手机端官网​  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  《下一站江湖2》武器获取方法  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】  汽水音乐网页版登录 汽水音乐网页端官方入口  《伊瑟》凶影追缉库卢鲁boss攻略  如何外贸网站设计-能留住客户提升用户体验!  多闪电脑版下载_多闪PC端模拟器使用  《绝区零》2.3前瞻|直播|内容介绍  铁路12306入口 铁路12306官网版入口登录网址  《搜书吧》阅读书籍方法  mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法  向往的生活小游戏启动处_向往的生活小游戏立即启动 

 2025-12-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.