广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python3 常用数据标准化方法详解
  • 900
分享到

Python3 常用数据标准化方法详解

2024-04-02 19:04:59 900人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

数据标准化是机器学习、数据挖掘中常用的一种方法。包括我自己在做深度学习方面的研究时,数据标准化是最基本的一个步骤。 数据标准化主要是应对特征向量中数据很分散的情况,防止小数据被大数据

数据标准化是机器学习数据挖掘中常用的一种方法。包括我自己在做深度学习方面的研究时,数据标准化是最基本的一个步骤。

数据标准化主要是应对特征向量中数据很分散的情况,防止小数据被大数据(绝对值)吞并的情况。

另外,数据标准化也有加速训练,防止梯度爆炸的作用。

下面是从李宏毅教授视频中截下来的两张图。

左图表示未经过数据标准化处理的loss更新函数,右图表示经过数据标准化后的loss更新图。可见经过标准化后的数据更容易迭代到最优点,而且收敛更快。

一、[0, 1] 标准化

[0, 1] 标准化是最基本的一种数据标准化方法,指的是将数据压缩到0~1之间。

标准化公式如下

代码实现


def MaxMinNORMalization(x, min, max):
  """[0,1] normaliaztion"""
  x = (x - min) / (max - min)
  return x

或者


def MaxMinNormalization(x):
  """[0,1] normaliaztion"""
  x = (x - np.min(x)) / (np.max(x) - np.min(x))
  return x

二、Z-score标准化

Z-score标准化是基于数据均值和方差的标准化化方法。标准化后的数据是均值为0,方差为1的正态分布。这种方法要求原始数据的分布可以近似为高斯分布,否则效果会很差。

标准化公式如下

下面,我们看看为什么经过这种标准化方法处理后的数据为是均值为0,方差为1

代码实现


def ZscoreNormalization(x, mean_, std_):
  """Z-score normaliaztion"""
  x = (x - mean_) / std_
  return x

或者


def ZscoreNormalization(x):
  """Z-score normaliaztion"""
  x = (x - np.mean(x)) / np.std(x)
  return x

补充:Python数据预处理:彻底理解标准化和归一化

数据预处理

数据中不同特征的量纲可能不一致,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果,因此,需要对数据按照一定比例进行缩放,使之落在一个特定的区域,便于进行综合分析。

常用的方法有两种:

最大 - 最小规范化:对原始数据进行线性变换,将数据映射到[0,1]区间

Z-Score标准化:将原始数据映射到均值为0、标准差为1的分布上

为什么要标准化/归一化?

提升模型精度:标准化/归一化后,不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

加速模型收敛:标准化/归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。

如下图所示:

哪些机器学习算法需要标准化和归一化

1)需要使用梯度下降和计算距离的模型要做归一化,因为不做归一化会使收敛的路径程z字型下降,导致收敛路径太慢,而且不容易找到最优解,归一化之后加快了梯度下降求最优解的速度,并有可能提高精度。比如说线性回归、逻辑回归、adaboost、xgboost、GBDT、SVM、NeuralNetwork等。需要计算距离的模型需要做归一化,比如说KNN、KMeans等。

2)概率模型、树形结构模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、随机森林。

彻底理解标准化和归一化

示例数据集包含一个自变量(已购买)和三个因变量(国家,年龄和薪水),可以看出用薪水范围比年龄宽的多,如果直接将数据用于机器学习模型(比如KNN、KMeans),模型将完全有薪水主导。


#导入数据
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('Data.csv')

缺失值均值填充,处理字符型变量


df['Salary'].fillna((df['Salary'].mean()), inplace= True)
df['Age'].fillna((df['Age'].mean()), inplace= True)
df['Purchased'] = df['Purchased'].apply(lambda x: 0 if x=='No' else 1)
df=pd.get_dummies(data=df, columns=['Country'])

最大 - 最小规范化


from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(df)
scaled_features = scaler.transform(df)
df_MinMax = pd.DataFrame(data=scaled_features, columns=["Age", "Salary","Purchased","Country_France","Country_Germany", "Country_spain"])

Z-Score标准化


from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_X = sc_X.fit_transform(df)
sc_X = pd.DataFrame(data=sc_X, columns=["Age", "Salary","Purchased","Country_France","Country_Germany", "Country_spain"])


import seaborn as sns
import matplotlib.pyplot as plt
import statistics
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
fig,axes=plt.subplots(2,3,figsize=(18,12)) 
sns.distplot(df['Age'], ax=axes[0, 0])
sns.distplot(df_MinMax['Age'], ax=axes[0, 1])
axes[0, 1].set_title('归一化方差:% s '% (statistics.stdev(df_MinMax['Age'])))
sns.distplot(sc_X['Age'], ax=axes[0, 2])
axes[0, 2].set_title('标准化方差:% s '% (statistics.stdev(sc_X['Age'])))
sns.distplot(df['Salary'], ax=axes[1, 0])
sns.distplot(df_MinMax['Salary'], ax=axes[1, 1])
axes[1, 1].set_title('MinMax:Salary')
axes[1, 1].set_title('归一化方差:% s '% (statistics.stdev(df_MinMax['Salary'])))
sns.distplot(sc_X['Salary'], ax=axes[1, 2])
axes[1, 2].set_title('StandardScaler:Salary')
axes[1, 2].set_title('标准化方差:% s '% (statistics.stdev(sc_X['Salary'])))

可以看出归一化比标准化方法产生的标准差小,使用归一化来缩放数据,则数据将更集中在均值附近。这是由于归一化的缩放是“拍扁”统一到区间(仅由极值决定),而标准化的缩放是更加“弹性”和“动态”的,和整体样本的分布有很大的关系。

所以归一化不能很好地处理离群值,而标准化对异常值的鲁棒性强,在许多情况下,它优于归一化。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: Python3 常用数据标准化方法详解

本文链接: https://www.lsjlt.com/news/122308.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python3 常用数据标准化方法详解
    数据标准化是机器学习、数据挖掘中常用的一种方法。包括我自己在做深度学习方面的研究时,数据标准化是最基本的一个步骤。 数据标准化主要是应对特征向量中数据很分散的情况,防止小数据被大数据...
    99+
    2022-11-11
  • Python3实现常用数据标准化方法
    数据标准化是机器学习、数据挖掘中常用的一种方法。包括我自己在做深度学习方面的研究时,数据标准化是最基本的一个步骤。数据标准化主要是应对特征向量中数据很分散的情况,防止小数据被大数据(绝对值)吞并的情况。另外,数据标准化也有加速训练...
    99+
    2023-01-31
    常用 方法 数据
  • Python3中实现数据标准化的方法有哪些
    今天就跟大家聊聊有关Python3中实现数据标准化的方法有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、[0, 1] 标准化[0, 1] 标准化是最基本的一种数据标准化方法,...
    99+
    2023-06-14
  • Python常用标准库详解(pickle序列化和JSON序列化)
    目录常用的标准库序列化模块序列化和反序列化使用场景dumps & loadsdump & loadJSON序列化模块使用场景支持的数据类型JSON和pickle的区别...
    99+
    2022-11-11
  • Kotlin 标准函数和静态方法示例详解
    目录标准函数withrunApply定义静态方法注解顶层方法标准函数 with with 的作用是可以在连续调用同一对象的多个方法时让代码变得更加精简 val result = wi...
    99+
    2022-11-13
    Kotlin 标准函数静态方法 Kotlin 标准函数
  • MyBatisPlus标准数据层CRUD的使用详解
    目录标准CRUD使用新增删除修改根据ID查询查询所有标准CRUD使用 对于标准的CRUD功能在MP中都提供了方法供我们使用。 此案例环境是根据上篇让入门案例内容。 MyBatisP...
    99+
    2022-11-13
  • Python标准数据类型-字符串常用方法(下)【文末送书】
    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 📃个人主页:hacker707的csdn博客 🔥系列专栏...
    99+
    2023-08-31
    python 字符串 原力计划
  • Python标准数据类型-字符串常用方法(上)【文末送书】
    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1 📃个人主页:hacker707的csdn博客 🔥系列专栏...
    99+
    2023-09-03
    python 字符串 原力计划
  • 详解JavaScript数组的常用方法
    目录数组的常用方法pop()unshift()shift()slice()splice()数组元素去重concat()join()reverse()sort()总...
    99+
    2022-11-12
  • 优化数据库的常用方法
    这篇文章主要介绍优化数据库的常用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!优化数据库通常可以使用如下方法:选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTN...
    99+
    2022-10-18
  • Vue中data数据初始化方法详解
    目录初始化化数据的一些方法以下是一个简单的例子父组件子组件显示效果销毁数据的父组件子组件显示效果当组件的根元素使用了v-if的时候, 并不会初始化data中的数据 如果想完全销毁该组...
    99+
    2023-05-19
    Vue data数据初始化 Vue data初始化 Vue数据初始化
  • 常用的MySQL数据库优化方法
    优化索引、SQL语句、分析慢查询;设计表的时候严格根据数据库的设计范式来设计数据库;你用memcache缓存,把经常访问到的数据而且不需要经常变化的数据放在memcache缓存中,能节约磁盘IO;优化硬件;...
    99+
    2022-10-18
  • MYSQL数据库表结构优化方法详解
    本文实例讲述了MYSQL数据库表结构优化方法。分享给大家供大家参考,具体如下:  选择合适的数据类型     1、使用可以存下你的数据的最小的数据类型  ...
    99+
    2022-10-18
  • python优化数据预处理方法Pandaspipe详解
    我们知道现实中的数据通常是杂乱无章的,需要大量的预处理才能使用。Pandas 是应用最广泛的数据分析和处理库之一,它提供了多种对原始数据进行预处理的方法。 import nump...
    99+
    2022-11-12
  • Swift 数组及常用方法详解总结
    目录1. 创建数组2. 快捷创建重复元素的数组3. 数组相加4. 常用方法5. 数组遍历Swift 数组及常用方法 1. 创建数组 // 创建整型数组 var array1: [...
    99+
    2022-11-12
  • Python常用正则函数使用方法详解
    今天给大家介绍一下Python中常用的正则表达式处理函数。Python的正则表达式主要有两种方法完成模式匹配:『搜索』和『匹配』   re.match re.match 尝...
    99+
    2022-11-12
  • Vue使用Echarts实现数据可视化的方法详解
    目录一,Echarts1.1 获取ECharts1.2 引入 ECharts二,Vue使用Echarts2.1 Vue环境2.2 main.js引入Echarts2.3 使用模板2....
    99+
    2022-11-13
  • Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
    我们可以利用urllib来抓取远程的数据进行保存哦,以下是python3 抓取网页资源的多种方法,有需要的可以参考借鉴。 1、最简单 import urllib.request response = u...
    99+
    2022-06-04
    详解 异常 方法
  • Python实现常见数据格式转换的方法详解
    目录xml_to_csvcsv_to_tfrecordxml_to_csv 代码如下: import os import glob import pandas as pd impor...
    99+
    2022-11-11
  • JavaScript数组常用方法解析及数组扁平化
    目录前言一、常用数组操作方法push末尾追加元素pop删除数组末尾元素sort排序shift数组开头添加元素 && unshift数组开头删除元素数组合并concat...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作