可能是最全的数据标准化教程(附python代码)

简介: 什么是数据标准化(归一化)数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。

什么是数据标准化(归一化)

数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。为了消除指标之间的量纲影响,保证结果的可靠性,需要进行数据标准化处理,以解决数据指标之间的可比性。

为什么要数据归一化:

1)归一化后加快了梯度下降求最优解的速度;
当存在多个特征时,如果特征数据范围不一致,可能会导致梯度下降的路径摇摆不定,效率低下。
如下图所示,蓝色的圈圈图代表的是两个特征的等高线。其中左图两个特征X1和X2的区间相差非常大,X1区间是[0,2000],X2区间是[1,5],其所形成的等高线非常尖。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;


img_14d3d5634f505d12438804eb50538f62.jpe
image

而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。
因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。

2)归一化有可能提高精度。
一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。

常见的数据归一化方法

1) 线性归一化

也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间。转换函数如下:


img_625ad89032db2f623cc0bb30a9d8e060.jpe
image

其中max为样本数据的最大值,min为样本数据的最小值。
这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

python代码:
def Normalization(x):
    return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]
    
# 或者调用sklearn包的方法
from sklearn import preprocessing   
import numpy as np  
X = np.array([[ 1., -1.,  2.],  
              [ 2.,  0.,  0.],  
              [ 0.,  1., -1.]])  
min_max_scaler = preprocessing.MinMaxScaler()  
X_minMax = min_max_scaler.fit_transform(X)  

1*) 如果想要将数据映射到[-1,1],则将公式换成:

img_4ec8fbeb8ce009bf57d55eb81a77f565.jpe
image

x_mean表示数据的均值。

python代码:
def Normalization2(x):
    return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]

2) 标准差标准化

也称为z-score标准化。这种方法根据原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:


img_b648bb8af72eeac6bdb6fc0f9d739b93.jpe
image

其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,Z-score标准化表现更好。

python代码:

from sklearn import preprocessing   
import numpy as np  
X = np.array([[ 1., -1.,  2.],  
              [ 2.,  0.,  0.],  
              [ 0.,  1., -1.]])  
# calculate mean  
X_mean = X.mean(axis=0)  
# calculate variance   
X_std = X.std(axis=0)  
# standardize X  
X1 = (X-X_mean)/X_std  # 自己计算
# use function preprocessing.scale to standardize X  
X_scale = preprocessing.scale(X)  # 调用sklearn包的方法
# 最终X1与X_scale等价

3) 非线性归一化

经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V, 2)还是log(V, 10)等。

3.1 对数转换

y=log10(x) /log10(max)

3.2 反余切函数转换

y=atan(x)*2/PI

目录
相关文章
|
15天前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
57 33
|
16天前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
40 10
|
20天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
1月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
68 8
|
1月前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
108 7
|
1月前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
49 4
|
1月前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
49 5
|
1月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
74 8
|
1月前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
1月前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
55 6

热门文章

最新文章