高度偏斜特征处理:log(x)、sqrt(x)、box-cox、Yeo-Johnson

news2025/1/6 20:51:37

一、概念

高度偏斜的特征 : 数据分布不均匀、不对称的特征

处理之后:使其分布更接近正态分布或至少减少偏斜程度

二、处理方法

1、对数变换:log(x)

  • 适用于右偏数据
  • 压缩大值,拉伸小值

2、平方根变换:sqrt(x)

  • 对右偏数据的效果比对数变换温和

3、Box-Cox变换

  • 一种更通用的幂变换方法
  • 可以处理各种程度的偏斜

4、Yeo-Johnson变换

  • Box-Cox的扩展,可以处理负值和零

三、代码

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from sklearn.preprocessing import PowerTransformer

# 设置随机种子以确保结果可重现
np.random.seed(42)

# 生成一个右偏(正偏)的数据集
data = np.random.lognormal(mean=0, sigma=1, size=10000)

# 计算关键统计量
min_val = np.min(data)
q1 = np.percentile(data, 25)
median = np.median(data)
q3 = np.percentile(data, 75)
max_val = np.max(data)

print(f"原始数据:")
print(f"最小值: {min_val:.2f}")
print(f"25%分位点: {q1:.2f}")
print(f"中位数: {median:.2f}")
print(f"75%分位点: {q3:.2f}")
print(f"最大值: {max_val:.2f}")
print(f"偏度: {stats.skew(data):.2f}")

# 对数变换
log_data = np.log(data)
# 平方根变换
sqrt_data = np.sqrt(data)
# Box-Cox变换
pt_bc = PowerTransformer(method='box-cox')
boxcox_data = pt_bc.fit_transform(data.reshape(-1, 1)).flatten()
# Yeo-Johnson变换
pt_yj = PowerTransformer(method='yeo-johnson')
yeojohnson_data = pt_yj.fit_transform(data.reshape(-1, 1)).flatten()

# 可视化
plt.figure(figsize=(15, 10))

# 原始数据
plt.subplot(231)
plt.hist(data, bins=50, edgecolor='black')
plt.title(u"原始数据分布",fontproperties=zhfont)
plt.xlabel(u'值',fontproperties=zhfont)
plt.ylabel(u"频率",fontproperties=zhfont)

# 对数变换后的数据
plt.subplot(232)
plt.hist(log_data, bins=50, edgecolor='black')
plt.title("对数变换",fontproperties=zhfont)
plt.xlabel("log(值)",fontproperties=zhfont)
plt.ylabel("频率",fontproperties=zhfont)

# 平方根变换后的数据
plt.subplot(233)
plt.hist(sqrt_data, bins=50, edgecolor='black')
plt.title("平方根变换",fontproperties=zhfont)
plt.xlabel("sqrt(值)",fontproperties=zhfont)
plt.ylabel("频率",fontproperties=zhfont)

# Box-Cox变换后的数据
plt.subplot(234)
plt.hist(boxcox_data, bins=50, edgecolor='black')
plt.title("Box-Cox变换",fontproperties=zhfont)
plt.xlabel("Box-Cox(值)",fontproperties=zhfont)
plt.ylabel("频率",fontproperties=zhfont)

# Yeo-Johnson变换后的数据
plt.subplot(235)
plt.hist(yeojohnson_data, bins=50, edgecolor='black')
plt.title("Yeo-Johnson变换",fontproperties=zhfont)
plt.xlabel("Yeo-Johnson(值)",fontproperties=zhfont)
plt.ylabel("频率",fontproperties=zhfont)

plt.tight_layout()
plt.show()

# 计算变换后的统计量
for name, transformed_data in [("对数变换", log_data), 
                               ("平方根变换", sqrt_data), 
                               ("Box-Cox变换", boxcox_data), 
                               ("Yeo-Johnson变换", yeojohnson_data)]:
    print(f"\n{name}后:")
    print(f"最小值: {np.min(transformed_data):.2f}")
    print(f"25%分位点: {np.percentile(transformed_data, 25):.2f}")
    print(f"中位数: {np.median(transformed_data):.2f}")
    print(f"75%分位点: {np.percentile(transformed_data, 75):.2f}")
    print(f"最大值: {np.max(transformed_data):.2f}")
    print(f"偏度: {stats.skew(transformed_data):.2f}")
    

四、结果

原始数据:
最小值: 0.02
25%分位点: 0.51
中位数: 1.00
75%分位点: 1.96
最大值: 50.72
偏度: 5.83


对数变换后:
最小值: -3.92
25%分位点: -0.67
中位数: -0.00
75%分位点: 0.67
最大值: 3.93
偏度: 0.00

平方根变换后:
最小值: 0.14
25%分位点: 0.71
中位数: 1.00
75%分位点: 1.40
最大值: 7.12
偏度: 1.78

Box-Cox变换后:
最小值: -3.91
25%分位点: -0.67
中位数: -0.00
75%分位点: 0.67
最大值: 3.91
偏度: -0.00

Yeo-Johnson变换后:
最小值: -2.18
25%分位点: -0.78
中位数: -0.03
75%分位点: 0.75
最大值: 2.57
偏度: 0.13

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

臂式血压计电子方案ocba设计与开发

臂式血压计是运用电子技术与血压间接测量原理进行血压测量的医疗设备。臂式血压计有臂式、腕式、手表式之分;其电子技术已经历了最原始的第一代(机械式定速排气阀)、第二代(电子伺服阀)、第三代(加压同步测…

学习测试12-车(略)

系统讲解,可以在懂车帝网站去了解汽车结构

商用密码测评之对HTTPS(TLS)协议中各个参数解释

1、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 是一个广泛使用的TLS(传输层安全协议)加密套件,它结合了多种技术和算法来确保网络通信的安全。下面是对该加密套件中各个参数的详细解释: 1. TLS 定义:TLS(传…

【文件解析漏洞】实战详解!

漏洞描述: 文件解析漏洞是由于中间件错误的将任意格式的文件解析成网页可执行文件,配合文件上传漏洞进行GetShell的漏洞! IIS解析漏洞: IIS6.X: 方式一:目录解析 在网站下建立文件夹的名字为.asp/.asa 的文件夹,其目…

【前端 · 面试 】JavaScript 之你不一定会的基础题(一)

最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正、交流。 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火。 JavaScript 之你不一定会的基础题 前言 面试往…

python中list的深拷贝和浅拷贝

其实这还是涉及到python中的可变对象和不可变对象的概念。 https://www.cnblogs.com/poloyy/p/15073168.html # -*- coding: utf-8 -*-person [name, [savings, 100.00]] hubby person[:] # slice copy wifey list(person) # fac func copy a [id(x) for x in person] b …

【Vue3】watch 监视多种类型数据

【Vue3】watch 监视多种类型数据 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗…

新闻稿的写作格式,干货分享

随着互联网的发展,新闻稿在互联网上的地位非常高,新闻稿对比一般软文来说内容质量偏高而且还具备:严谨、时效、可观的特点。 撰写新闻稿主要就是突出最新鲜、最重要的事实,同时,新闻稿也是文字简洁,并且时效…

【nginx、apache】网站只有首页可以正常打开,其他页面都实现404

【nginx、apache】网站只有首页可以正常打开,其他页面都实现404 1、检查伪静态规则(中枪)

【剑指offer】

剑指offer 面试题67&#xff1a;字符串转成整数面试题1&#xff1a;赋值运算符函数面试题3&#xff1a;数组中重复的数字 面试题67&#xff1a;字符串转成整数 LeedCode&#xff1a;LCR 192. 把字符串转换成整数 (atoi) 测试atoi的功能和异常效果 #include <iostream> #…

【Linux】全志Tina配置屏幕时钟的方法

一、文件位置 V:\f1c100s\Evenurs\f1c100s\tina\device\config\chips\c200s\configs\F1C200s\sys_config.fex 二、文件内容 三、介绍 在此处可以修改屏幕的频率&#xff0c;当前为21MHz。 四、总结 注意选择对应的屏幕的参数&#xff0c;sdk所支持的屏幕信息都在此文件夹中…

嵌入式C++、STM32、Flask框架、SQL、ROS系统和MQTT协议通讯:智能药盒及物联网数据监测设计思路(代码示例)

目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. 开发环境 2. STM32 微控制器代码示例 3. ROS 节点代码示例 4. 后端服务器代码示例&#xff08;Flask&#xff09; 数据库部分 3.4 删除药物记录 项目概述 随着老龄化社会的加剧&#xff0c;患者…

钢琴模拟器

文章目录 钢琴模拟器代码结构HTML结构CSS样式JavaScript功能 源码效果图 钢琴模拟器 代码结构 HTML结构 <html>: HTML文档的根元素。 <head>: 包含文档的元数据。 <base>: 指定相对URL的基准。 <title>: 指定页面的标题。 <style>: 包含嵌入的…

关于用log提高排查问题的设置

今天在了解项目业务的时候&#xff0c;想搞清楚执行顺序&#xff0c;加了很多打印&#xff0c;类似console.log(1111,xxxx) console.log(2222,xxxx)&#xff0c;有时候断点没开sourcemap不是源码所以我更喜欢打印&#xff0c;然后就导致打印比较紊乱&#xff0c;而且前面的1111…

sql截取时间数据方法函数之截取时间的年月

sql截取时间数据方法函数之截取时间的年月 方法一&#xff1a;DATE_FORMAT() 函数 select trans_date,date_format(trans_date,%Y-%m) month from Transactions;方法二&#xff1a;left(str, length)函数 #从左边开始截取 select trans_date,left(trans_date, 7) month fro…

中国高新科技杂志中国高新科技杂志社中国高新科技编辑部2024年第10期目录

科研达人 互联网领域资深工程师陈晔 技术引领 创新赋能 以IT技术推动行业转型升级 宋丽君; 5-6 中国科学院过程工程研究所副研究员武春晓 助跑科研“马拉松”共圆创新中国梦 周玮 ;杨烁; 7-8 中国科学院大学资源与环境学院副教授蔡晓琳 生物治理重金属 土壤焕发新生…

「安当产品应用案例100集」004-国密UKEY增强软件授权安全

国密UKEY在软件授权方案中的应用主要体现在增强软件授权的安全性、实现更严格的访问控制以及满足特定行业或领域的安全要求等方面。以下是安当的客户在软件授权方面的应用案例概述。 一、安当UKEY软件授权案例 国密UKEY&#xff0c;即采用国家密码管理局认证的密码算法的USB安全…

Spring源码解析(25)之AOP的BeanDefinitiion准备

一、AOP代码准备 aop.xml文件准备&#xff0c;代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance…

【轻松拿捏】Java-List、Set、Map 之间的区别是什么?

List、Set、Map 之间的区别是什么&#xff1f; 一、List 二、Set 三、Map &#x1f388;边走、边悟&#x1f388;迟早会好 一、List 有序性&#xff1a;List 保持元素的插入顺序&#xff0c;即元素按添加的顺序存储和访问。允许重复&#xff1a;List 可以包含重复的元素。…

docker compose 安装 kafka

一 前置准备 创建 /data/kafkadata /data/zookeeper-1用于保存kafka和zookeeper的配置文件 kafkadata中创建三个文件夹 /kafka1 /kafka2 /kafka3&#xff0c;用于存放三个kafka节点的配置文件 zookeeper-1文件夹中创建 /conf /data /logs /datalog四个文件夹&#xff0c;用于…