机器学习数据的标准化(normalization)和归一化

news/2024/7/3 11:35:27

数据的标准化(normalization)和归一化
数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。*
从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不同的标准化方法,对系统的评价结果会产生不同的影响,然而不幸的是,在数据标准化方法的选择上,还没有通用的法则可以遵循。
其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。

标准化*
标准化数据通过减去均值然后除以方差(或标准差),这种数据标准化方法经过处理后数据符合标准正态分布,即均值为0,标准差为1,转化函数为:

x =(x - 𝜇)/𝜎

适用于:如果数据的分布本身就服从正态分布,就可以用这个方法。

通常这种方法基本可用于有outlier的情况,但是,在计算方差和均值的时候outliers仍然会影响计算。所以,在出现outliers的情况下可能会出现转换后的数的不同feat**
z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。该种标准化方式要求原始数据的分布可以近似为高斯分布,否则效果会变得很糟糕。
归一化**
将特征缩放至特定区间,将特征缩放到给定的最小值和最大值之间,或者也可以将每个特征的最大绝对值转换至单位大小。这种方法是对原始数据的线性变换,将数据归一到[0,1]中间。转换函数为:

x = (x-min)/(max-min)

这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

敲黑板,这种方法对于outlier非常敏感,因为outlier影响了max或min值,所以这种方法只适用于数据在一个范围内分布的情况
2.3 RobustScaler
如果你的数据包含许多异常值,使用均值和方差缩放可能并不是一个很好的选择。这种情况下,你可以使用 robust_scale 以及 RobustScaler 作为替代品。它们对你的数据的中心和范围使用更有鲁棒性的估计。

This Scaler removes the median(中位数) and scales the data according to the quantile range(四分位距离,也就是说排除了outliers)

2.4 [0, 1] 还是 [-1, 1] ?
假设我们有一个只有一个hidden layer的多层感知机(MLP)的分类问题。每个hidden unit表示一个超平面,每个超平面是一个分类边界。参数w(weight)决定超平面的方向,参数b(bias)决定超平面离原点的距离。如果b是一些小的随机参数(事实上,b确实被初始化为很小的随机参数),那么所有的超平面都几乎穿过原点。所以,如果data没有中心化在原点周围,那么这个超平面可能没有穿过这些data,也就是说,这些data都在超平面的一侧。这样的话,局部极小点(local minima)很有可能出现。 所以,在这种情况下,标准化到[-1, 1]比[0, 1]更好。

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

2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用MinMaxScaler。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

原因是使用MinMaxScaler,其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。

而在StandardScaler中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。
1、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

原因是使用第一种方法(线性变换后),其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。而在第二种归一化方式中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。

连续型特征还有一种处理方式是,先分桶/分箱(如等频/等距的分)[待写]进行离散化后再使用离散数据的处理方法。

离散数据处理参考[数据预处理:独热编码(One-Hot Encoding)]。

不需要归一化的模型:

(0/1取值的特征通常不需要归一化,归一化会破坏它的稀疏性。)

有些模型则不受归一化影响,如DecisionTree。

ICA好像不需要归一化(因为独立成分如果归一化了就不独立了?)。

基于平方损失的最小二乘法OLS不需要归一化。

http://www.niftyadmin.cn/n/4613425.html

相关文章

python 数据预处理

观察数据 housing.info()housing.describe()housing.hist(bins50, figsize(20,15)) # 连续数据 plt.show() 离散变量使用value_counts()观察: housing[‘ocean_proximity’].value_counts() 分割数据为测试数据和训练数据 方法1 train_test_split from sklearn.m…

Linuxshell之如何控制脚本

写在前面:案例、常用、归类、解释说明。(By Jim) CtrlC组合键可以生产SIGINT信号CtrlZ组合键生产SIGTSTP信号,停止进程后程序仍然留在内存中,能够从停止的地方继续运行。捕获信号#!/bin/bash# testing output in a bac…

MySQL全文检索笔记 转载

1. MySQL 4.x版本及以上版本提供了全文检索支持,但是表的存储引擎类型必须为MyISAM,以下是建表SQL,注意其中显式设置了存储引擎类型 CREATE TABLE articles (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,title VARCHAR(200),body T…

Python使用 sklearn pipeline进行数据清洗

setup pipeline from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler num_pipeline Pipeline([ (‘imputer’, Imputer(strategy“median”)), #中值写入 (‘attribs_adder’, CombinedAttributesAdder()),#增加比例列 (‘std_scaler’…

Swift iOS macOS 多语言支持,国际化支持, Localization Localizable

Swift iOS macOS 多语言支持,国际化支持, Localization Localizable 搞开发一定要不断的提升自己的英文水平,因为很多文档都是英文的,像 iOS 的开发API文档等等。学好英文,你就可以在编程的世界里任意遨游。 完成一个项…

Swift iOS macOS 字符串 插入到已排序的数组中,字符串对比

Swift iOS macOS 字符串 插入到已排序的数组中,字符串对比 今天需要实现这样一个功能: 有一个字符串 ad,需要按顺序插入到这样一个字符串数组中。 注意:这个数组中有近8万条数据,所以不可能每添加一个数据都重新排序一…

python 回归和决策树 数据验证和参数调整

cross_val_score, cv10, 随机分成10个子集 ​from sklearn.model_selection import cross_val_score scores cross_val_score(tree_reg, housing_prepared, housing_labels, scoring“neg_mean_squared_error”, cv10) tree_rmse_scores np.sqrt(-scores) def display_scor…

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String 本地化主要包含两个部分:代码中文本的本地化 和 StoryBoard 中文本的本地化 iOS 和 macOS 是一样的 这里只介绍 StoryBoard 的本地化&a…