BOX-COX变换介绍

简介: BOX-COX变换介绍

前言


通常情况下,我们拿到的数据并不是正态分布的,为了满足经典线性模型的正态性假设,

常常需要使用

1、指数变换

2、对数转化

3、倒数转换

4、平方根后取倒数

5、平方根后再取反正弦

使其转换后的数据接近正态,Box-Cox变换可以使线性回归模型在满足线性、正态性、独立性以及方差齐性的同时,又不丢失信息。变换后有利于线性模型的拟合以及分析出特征的相关性。


一、BOX-COX变换的优点?


1、Box-Cox变换之后,可以一定程度上减小不可观测的误差和预测变量的相关性。

2、Box-Cox变换的主要特点是引入一个参数,通过数据本身估计该参数进而确定应采取的数据变换形式,Box-Cox变换可以明显地改善数据的正态性、对称性和方差相等性,对许多实际数据都是行之有效的。

3、Box-Cox变换即将数据转换为满足正态分布的数据


二、BOX-COX实战


注意:在做Box-Cox变换之前,需要对数据做归一化预处理。在归一化时,对数据进行合并操作可以使训练数据和测试数据一致。也可以分开对训练数据和测试数据进行归一化处理,不过这种方式建立在训练数据和测试数据分布一致的情况下,建议在数据量较大的情况下使用。

# 函数详解
# scipy.stats.boxcox(x, lmbda=None, alpha=None)
# x:输入数组
# 返回
# boxcox:Box-COx次方转换数组
# maxlog:找到的最佳变换参数,如果lmbda参数是None并且alpha不是None,这个返回的浮点数元组表示在给定alpha下最小和最大置信限制


实战分析

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
import warnings
# 注意,这里的V0特征值已经经过归一化处理。
dat = train_data_process[['V0', 'target']]
plt.figure(figsize=(10,10))
ax=plt.subplot(2,2,1)
sns.distplot(dat['V0'],fit=stats.norm)
ax=plt.subplot(2,2,2)
res = stats.probplot(dat['V0'], plot=plt)
# 这里为什么要加一??
# boxcox要求输入的数据是正值,这里的输入值一般是经过预处理后的,有一个固定的范围,如果存在非正值,则需要加上一个常数,保证输入值为正值。
trans_var, lambda_var = stats.boxcox(dat['V0'].dropna()+1)
print()
# scale_minmax: 自定义的归一化函数,资料显示还要这么处理,但是实际过程中发现加不加这一步影响不大。
trans_var = scale_minmax(trans_var)  
ax=plt.subplot(2,2,3)
sns.distplot(trans_var,fit=stats.norm)
ax=plt.subplot(2,2,4)
res = stats.probplot(trans_var, plot=plt)


输出:第一行是归一化之后,boxcox之前的数据分布,第二行是boxcox之后的数据分布。

1442e76a106c48c997b768cf258a2d1f.png


参考文章:

box-cox变换.

box-cox解读.

stats.boxcox()函数详解.

scipy.stats.boxcox.


总结


天又黑了,看起来要下雨的样子。

相关文章
|
网络协议 网络架构
计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由
计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由
计算机网络实验(华为eNSP模拟器)——第四章 配置静态路由、动态路由
R语言分布滞后线性和非线性模型DLM和DLNM建模应用| 系列文章
R语言分布滞后线性和非线性模型DLM和DLNM建模应用| 系列文章
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
47_历史里程碑:从ELIZA到Transformer
在当今的数字时代,我们已经习惯于与智能助手对话、向大语言模型提问,甚至依赖它们生成创意内容。然而,这看似理所当然的人机对话能力,实际上经历了长达半个多世纪的曲折发展历程。从1966年麻省理工学院的简陋程序,到2017年Google提出的革命性架构,聊天AI的演变不仅是技术的进步,更是人类对自身语言本质探索的缩影。
1200 31
|
11月前
|
缓存 编解码 数据可视化
uniapp发行快应用 [HBuilder] 23:33:45.537 manifest.json->quickapp-webview 缺少 icon 配置如何解决优雅草卓伊凡
uniapp发行快应用 [HBuilder] 23:33:45.537 manifest.json->quickapp-webview 缺少 icon 配置如何解决优雅草卓伊凡
321 5
uniapp发行快应用 [HBuilder] 23:33:45.537 manifest.json->quickapp-webview 缺少 icon 配置如何解决优雅草卓伊凡
|
关系型数据库 MySQL Shell
深入了解Linux /etc/passwd文件
深入了解Linux /etc/passwd文件
1410 0
|
Ubuntu 虚拟化 Windows
将Vmware虚拟机磁盘映射到本地实现文件传输
将虚拟机磁盘映射到本地,可以实现文件互传,更方便使用,在开发时可以替代SecureFx等FTP客户端软件
2090 0
|
XML 前端开发 Java
24. 【Android教程】适配器 Adapter
24. 【Android教程】适配器 Adapter
660 3
|
缓存 架构师 算法
Java内存溢出如何解决,Java oom排查方法,解决办法
在Java开发过程中,有效的内存管理是保证应用程序稳定性和性能的关键。不正确的内存使用可能导致内存泄露甚至是致命的OutOfMemoryError(OOM)。
322 0
|
数据可视化 Go vr&ar
41 个下载免费 3D 模型的最佳网站
在哪里可以找到3D模型?现在许多网站都提供了大量免费和高质量的3D模型,以帮助所有3D创作者节省时间和精力。但是,并非您找到的所有3D模型都有质量保证或免费供个人使用! 在本文中,我们收集了40多个最佳3D模型网站,包括室内设计,建筑外观设计,动物,物体,车辆,游戏角色和环境等,我们还为您提供了用户指南,以便您可以专注于创建其他一些令人惊叹的作品。
3517 0
|
Java Maven
JDK8使用JavaPackager打包项目生成.exe可执行文件
JDK8使用JavaPackager打包项目生成.exe可执行文件