0

0

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

心靈之曲

心靈之曲

发布时间:2025-12-13 11:28:03

|

249人浏览过

|

来源于php中文网

原创

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

本文将详细介绍在机器学习模型中,如何将经过对数转换(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. 模型训练与预测

在对数据进行对数转换后,我们使用这些转换后的数据来训练机器学习模型。模型的输出(预测值)也将处于对数尺度。

示例:定义特征和目标,训练模型并进行预测

改图鸭AI图片生成
改图鸭AI图片生成

改图鸭AI图片生成

下载
# 定义特征 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. 评估模型与展示结果

在还原预测值后,我们通常需要:

  1. 将真实值也还原到原始尺度:为了在原始尺度上进行准确的模型评估(如计算 MAE、RMSE),测试集中的真实值 y_test 也需要通过 np.exp() 还原。
  2. 计算原始尺度的评估指标:使用还原后的预测值和真实值来计算评估指标。
  3. 展示原始尺度的预测结果和真实值:创建一个包含原始尺度预测值和真实值的 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() 函数,我们不仅能够获得具有实际意义的预测值,还能在原始数据层面对模型性能进行准确评估。掌握这一技能对于构建和部署实用的机器学习模型至关重要。

相关专题

更多
微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

36

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

99

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

148

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

57

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

40

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

107

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

44

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

12

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号