如何利用Python进行数据归一化?

1. 知识简介

数据归一化是数据预处理的一项重要步骤,它对于提高模型性能、加速模型训练、避免数值计算问题以及提高模型的泛化能力都具有重要作用。进行数据归一化可以起到以下作用:消除量纲影响,加速模型收敛,提高模型性能,防止数值计算问题,提高模型泛化能,更好地处理异常值。
建模
辨识方法
方法

正负指标

3.python中实现

3.1 正向型指标和负向型指标

正向型指标的取值范围在0到正无穷,数值越大表示绩效越好。在归一化时,通常使用 Min-Max 归一化方法,将指标缩放到0到1之间。
负向型指标的取值范围在负无穷到0之间,数值越接近0表示绩效越好。在归一化时,也使用 Min-Max 归一化方法,将指标缩放到0到1之间,但需要注意取值范围的定义。

import numpy as np
import pandas as pddef min_max_normalize(data, method='positive', feature_range=(0, 1)):"""Min-Max归一化Parameters:- data: 需要进行处理的DataFrame- method: 归一化方向,'positive'为正向,'negative'为逆向- feature_range: 设置归一化后的最小最大值,默认为 (0, 1)Returns:- normalized_data: 归一化后的DataFrame"""y_min, y_max = feature_rangenormalized_data = pd.DataFrame()for col in data.columns:col_max, col_min = data[col].max(), data[col].min()if method == 'negative':normalized_values = (y_max - y_min) * (col_max - data[col]) / (col_max - col_min) + y_minelif method == 'positive':normalized_values = (y_max - y_min) * (data[col] - col_min) / (col_max - col_min) + y_minnormalized_data[col] = normalized_values.valuesreturn normalized_data# 示例用法
# data = pd.DataFrame({'amount': [20, 40, 30, 26], 'cost': [3, 6, 2, 10]})
# normalized_data = min_max_normalize(data[['cost']], method='negative', feature_range=(0, 1))
3.2 中心倾向指标

中心倾向指标的取值范围一般视数据情况而定,数值越靠近中间位置表示绩效越好。在归一化时,通常使用 Min-Max 归一化方法,将指标缩放到0到1之间。
一些场景举例,比如财务绩效数据,利润、营业收入等中心倾向稳定的话,现实场景中,代表经营状况越好,比如生产质量控制越靠近设置的目标值越符合要求。
若是基于数据的情况,取中心位置的话,可以用以下方法:

import numpy as np
import pandas as pddef mid_normalize(data, feature_range=(0, 1)):"""中心倾向指标归一化Parameters:- data: 需要进行处理的DataFrame- feature_range: 设置归一化后的最小最大值,默认为 (0, 1)Returns:- normalized_data: 归一化后的DataFrame"""y_min, y_max = feature_rangenormalized_data = pd.DataFrame()for col in data.columns:col_max, col_min = data[col].max(), data[col].min()col_mid = (col_max + col_min) / 2normalized_values = data[col].map(lambda x: 2 * (x - col_min) / (col_max - col_min) if x < col_mid else 2 * (col_max - x) / (col_max - col_min))normalized_values *= (y_max - y_min)normalized_data[col] = normalized_values.valuesreturn normalized_data# 示例用法
#data=pd.DataFrame({'ph':[2,5,7,10,12],
#                  'mid':[100,20,50,70,90],
#                  'temperature':[-10,10,25,30,40]})
# normalized_data=mid_normalize(data[['ph', 'mid']])

若是有给定的中心值,则可以参考一下用法:

import pandas as pddef mid_normalize(data, best_values=None, feature_range=(0, 1)):"""中心倾向指标归一化Parameters:- data: 需要进行处理的DataFrame- best_values: 中心指标值,如果为None,则使用(feature_range[0] + feature_range[1]) / 2- feature_range: 设置归一化后的最小最大值,默认为 (0, 1)Returns:- normalized_data: 归一化后的DataFrame"""y_min, y_max = feature_rangenormalized_data = pd.DataFrame()if data.empty:raise ValueError("Input DataFrame is empty.")for col_index, col in enumerate(data.columns):c_max, c_min = data[col].max(), data[col].min()if best_values is None:c_mid = (y_max + y_min) / 2else:c_mid = best_values[col_index]normalized_values = 1 - abs(data[col] - c_mid) / (c_max - c_min)normalized_values *= (y_max - y_min)normalized_data[col] = normalized_valuesreturn normalized_data# 示例用法
#data=pd.DataFrame({'ph':[2,5,7,10,12],
#                  'mid':[100,20,50,70,90],
#                  'temperature':[-10,10,25,30,40]})
#normalized_data = mid_normalize(data[['ph', 'mid']], [7, 50])
3.3 区间型指标

区间型指标是一种度量指标,其特点是具有明确的数值区间,通常表示一个范围或区间内的值。这种类型的指标提供了更多的信息,而不仅仅是单一的数值。区间型指标在统计学、经济学、工程学、生态学等领域经常被使用。

import numpy as np
import pandas as pddef section_normalize(data, feature_range=(0, 1), target_section=(40, 60)):"""区间型指标归一化Parameters:- data: 需要进行处理的DataFrame- feature_range: 设置归一化后的最小最大值,默认为 (0, 1)- target_section: 目标区间,表示在该区间内的值将被保持不变Returns:- normalized_data: 归一化后的DataFrame"""y_min, y_max = feature_rangenormalized_data = pd.DataFrame()if data.empty:raise ValueError("Input DataFrame is empty.")for col in data.columns:col_max, col_min = data[col].max(), data[col].min()distance_to_min = max((target_section[0] - col_min), 0)distance_to_max = max((col_max - target_section[1]), 0)c = distance_to_min + distance_to_max# 区间映射函数简化normalized_values = 1 - np.abs(data[col] - np.mean(target_section)) / c# 当数值位于目标区间内时,将归一化的值设为1mask = (data[col] >= target_section[0]) & (data[col] <= target_section[1])normalized_values[mask] = 1normalized_values = np.clip(normalized_values, 0, 1)normalized_values *= (y_max - y_min)# 标记后输出normalized_data[col] = normalized_valuesreturn normalized_data# 示例用法
#  normalized_data = section_normalize(data[['temperature']], target_section=(20, 30))

4.后记

数据归一化是数据分析和机器学习中必不可少的步骤之一。它可以消除量纲影响,提高模型的性能和稳定性,加快模型的收敛速度,并方便特征选择过程。通过归一化,可以更好地理解和利用数据,提高模型的准确性和可解释性。
在进行数据归一化时,需要注意选择合适的归一化范围和方法,处理异常值,确定归一化顺序,并注意归一化的逆操作。通过合理的数据归一化处理,可以更好地利用数据进行分析和建模。

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

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

相关文章

硅谷大宽服务器:引领互联网新时代的核心技术

在当今这个信息爆炸的时代&#xff0c;数据已经成为了企业和个人的重要资产。服务器作为数据的存储和处理中心&#xff0c;其重要性不言而喻。硅谷大宽服务器以其卓越的性能、稳定的运行和优质的服务&#xff0c;赢得了全球众多企业和个人的信赖和选择。 硅谷大宽服务器的特点…

图解分库分表

中大型项目中&#xff0c;一旦遇到数据量比较大&#xff0c;小伙伴应该都知道就应该对数据进行拆分了。有垂直和水平两种。 垂直拆分比较简单&#xff0c;也就是本来一个数据库&#xff0c;数据量大之后&#xff0c;从业务角度进行拆分多个库。如下图&#xff0c;独立的拆分出…

Redisson分布式锁实现原理

Redisson主要解决一下问题 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如HashTable这样的代码中&#xff0c;他的方法都是使用synchronized修饰的&#xff0c;假如他在一个方法内&a…

解决Spring Boot应用在Kubernetes上健康检查接口返回OUT_OF_SERVICE的问题

现象 在将Spring Boot应用部署到Kubernetes上时&#xff0c;健康检查接口/healthcheck返回的状态为{"status":"OUT_OF_SERVICE","groups":["liveness","readiness"]}&#xff0c;而期望的是返回正常的健康状态。值得注意的…

VTK物体表面画贴合线条

1、自由画线 2、曲线拟合画线 3、三点闭合曲线

Docker Compose部署微服务项目实战讲解

一、Docker Compose简介 当需要在多个容器之间协调和管理应用程序时&#xff0c;Docker Compose是一个非常有用的工具。它允许通过一个配置文件来定义、配置和启动多个 Docker 容器&#xff0c;使得整个应用程序的部署变得更加简单和一致。以下是 Docker Compose 的一些重要概…

Linux使用宝塔面板+Discuz+cpolar内网穿透工具搭建可公网访问论坛

Linux宝塔面板搭建Discuz论坛&#xff0c; 并内网穿透实现公网访问 文章目录 Linux宝塔面板搭建Discuz论坛&#xff0c; 并内网穿透实现公网访问前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Di…

【 图片加载】Vue前端各种图片引用

文章目录 一、图片作为js常量&#xff08;常作为配置项的值 &#xff09;1、在线链接2、本地图片 二、图片img标签1、一般的src2、动态的src用require3、src可以接收二进制文件blob&#xff08;如后端返回的、a-upload传的图片) 三、背景图片 一、图片作为js常量&#xff08;常…

8款那些年救过我的数据文件恢复软件 - 误删除重要文件的“后悔药”

无论您在保存备份方面多么小心&#xff0c;灾难有时还是会发生。有时您的备份软件无法按预期运行。 如果您的外部驱动器靠近您的设备&#xff0c;发生火灾/洪水/故障时&#xff0c;有时备份会与原始文件一起丢失。即使是云存储也不能避免故障。 还有一个事实是&#xff0c;我…

C++设计模式之工厂模式(上)——简单工厂模式

工厂模式 概述简单工厂模式介绍示例示例使用运行结果缺点 概述 工厂模式属于一种创建型设计模式。其可以分为简单工厂模式&#xff0c;工厂模式和抽象工厂模式。工厂模式分为上、中、下三篇&#xff0c;本篇主要介绍简单工厂模式。 简单工厂模式 介绍 简单工厂模式可以理解…

二叉树题目:具有所有最深结点的最小子树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;具有所有最深结点的最小子树 出处&#xff1a;865. 具有所有最深结点的最小子树 难度 5 级 题目描述 要求 给定…

HCIP-六、OSPF-2 综合实验

六、OSPF-2 综合实验 实验拓扑实验需求及解法1.设备名称和部分IP地址已配置2.所有设备运行OSPF&#xff0c;进程号为13.区域间路由汇总4.外部路由汇总5.下发默认路由6. 虚链路 实验拓扑 实验需求及解法 本实验模拟OSPF综合型网络&#xff0c;按照以下需求完成实验。 1.设备名…

EventLog Analyzer:强大的日志管理与分析工具

随着企业网络规模的扩大和信息系统的复杂化&#xff0c;安全日志管理和分析成为了至关重要的一环。在这个背景下&#xff0c;EventLog Analyzer崭露头角&#xff0c;成为一款备受推崇的日志管理与分析工具。本文将介绍EventLog Analyzer的主要特点、功能以及为企业带来的实际价…

IDEA安装教程

文章目录 1 下载IntelliJ IDEA2 安装3 IDEA配置4 创建项目 1 下载IntelliJ IDEA ​ 官方网站上下载最新版本的IntelliJ IDEA。官方网站提供了两个版本&#xff1a;Community版和Ultimate版。 Community版是免费的&#xff0c;适用于个人和非商业用途。Ultimate版则需要付费购…

Exception in thread “消费者“ java.lang.IllegalMonitorStateException

这两天学习生产者消费者模型的时候&#xff0c;使用Java线程来实现&#xff0c;出现了一个问题“Exception in thread "消费者" java.lang.IllegalMonitorStateException”&#xff0c;并且&#xff0c;线程不结束。报错图片如下&#xff1a; 那我们怎么解决呢&…

竞赛选题 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…

河北专升本(微机原理)

目录 第一章&#xff1a;计算机基础与数制转化 1. 进制运算基础 2. 常用编码形式 3. 计算机系统的组成及其工作原理 4. 微机系统主要技术指标 第二章&#xff1a;8086微处理器及其系统 1. 8086微处理器&#xff08;CPU&#xff09; 2. 8086的存储器及I/O组织 3. 8086系…

vue中的列表过滤和列表排序

列表过滤 <body><div id"root"><!--输入框用于模糊查询--><input type"text" placeholder"请你输入名字" v-model"name"><ul><!--in可以换成of--><li v-for"(p,index) in persons" …

航天博物馆3D虚拟交互展厅让大众对科技发展有更深切的理解和感受

博物馆作为人们了解历史、文化和艺术的重要场所&#xff0c;现在可以通过VR全景技术来进行展览&#xff0c;让参观者身临其境地感受历史文化的魅力。本文将介绍博物馆VR全景的特点、优势&#xff0c;以及如何使用VR全景技术来使得博物馆的展览和教育活动更丰富。 VR数字博物馆…