
本文旨在详细阐述在机器学习模型中,如何将经过对数变换(logarithmic transformation)处理后的预测结果准确地还原回原始数值尺度。我们将探讨对数变换的目的、模型训练与预测过程,并重点讲解使用指数函数(`np.exp()`)进行反向变换的方法,同时强调在评估模型性能时,确保预测值和真实值处于相同尺度下的重要性。
在机器学习实践中,数据预处理是至关重要的一步。当目标变量(或某些特征)呈现高度偏斜分布(如长尾分布)时,直接用于模型训练可能会导致模型性能下降,例如线性模型可能难以捕捉非线性关系,或违反某些统计假设。对数变换是一种常用的技术,它通过将数据映射到对数空间来:
以下代码片段展示了如何对数据集中的特定列进行对数变换,同时处理非正值的情况:
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())在数据经过对数变换后,我们使用这些变换后的数据来训练机器学习模型。例如,如果 value_eur 是我们的目标变量 y,并且我们对其进行了对数变换,那么模型将学习预测 log(value_eur)。
以下是模型训练和预测的示例流程:
网易人工智能
网易数帆多媒体智能生产力平台
233
查看详情
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())模型预测出的 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())通过上述步骤,我们可以确保在机器学习模型中使用对数变换时,不仅能利用其优点改善模型性能,还能准确地将预测结果还原到原始业务含义的尺度,从而进行正确的解释和评估。
以上就是机器学习中对数变换预测结果的反向还原的详细内容,更多请关注其它相关文章!
# 正态分布
# 什么网站最容易推广赚钱
# 慈东工业区网站优化推广
# 订餐网站建设
# 宜宾网站建设设计
# 公司邮箱网站建设
# 安丘网站建设平台
# 分销推广网站有哪些
# 无锡制作网站建设推广
# seo优化程序排行
# 营销短信推广平台
# ai
# 过滤掉
# 进行了
# 一键
# 如何使用
# 只对
# 在对
# 自动识别
# 指数函数
# 网易
# red
相关文章:
如何在CSS中使用浮动制作导航栏_float实现水平菜单
QQ官网正版登录链接 QQ在线登录入口最新
NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
Mac怎么查看崩溃日志_Mac控制台错误报告分析
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
Go语言中JSON数据解析与字段访问教程
J*aScript中在Map循环中检测并处理空数组元素
响应式图片在网页设计中的正确实现方法
PHP教程:将数据库查询结果动态展示到HTML Textarea的最佳实践
怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】
圆通快递查询实时追踪 圆通物流包裹状态快速查看
MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景
yy漫画网页版官方入口_yy漫画官网登录页面链接
Typer应用中灵活处理命令行参数的令牌化与解析
Lar*el 递归关系中排除指定分支的教程
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
C++如何操作注册表_Windows平台下C++读写注册表的API函数详解
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
在PHP脚本中通过SSHFS挂载远程文件系统的最佳实践与常见问题解决
在Pyomo中实现基于变量的条件约束:Big-M方法详解
苹果手机如何防止被恶意App追踪
AO3同人作品网入口 AO3搜索引擎官网永久地址
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
PHP:从文本中提取带逗号的数字价格教程
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
12306选座怎么选到商务座_12306商务座选择与配置说明
微信网页版扫码登录入口 微信网页版二维码登录入口
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
在J*a项目里如何构建对象之间的契约_接口约束的实际落地
钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法
CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整
Go与Ruby之间实现AES加密互通:CFB模式下的密钥长度匹配策略
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南
在Runstone环境中高效处理TasteDive API的JSON数据
React项目中导航栏Logo自适应布局:避免裁剪与布局溢出
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
抖音创作助手登录入口_抖音创作辅助工具官网直达
狙击外星人小游戏开始_狙击外星人小游戏立即开始
Excel文件在线转换快速入口 Excel在线格式转换网站
c++ 获取系统当前时间 c++时间戳获取方法
word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法
Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程
葱吃多了会怎样 葱吃多了会伤胃吗
yandex入口引擎手机版 yandex安卓版下载入口
J*a实现学校排课程序_面向对象结构化项目示例
*请认真填写需求信息,我们会在24小时内与您取得联系。