丹东市做网站,手机商城网站系统,网站链接分享做推广,如何将自己做的网站变成中文关注上方“Python数据科学”#xff0c;选择星标#xff0c;精彩文章不会错过#xff01;今天说一个比较重要的内容#xff0c;无论是在算法建模还是在数据分析都比较常见#xff1a;数据归一化和标准化。开始之前#xff0c;请你先把网上看到的所有相关的博客、帖子都忘… 关注上方“Python数据科学”选择星标精彩文章不会错过今天说一个比较重要的内容无论是在算法建模还是在数据分析都比较常见数据归一化和标准化。开始之前请你先把网上看到的所有相关的博客、帖子都忘掉。不说全部能讲清楚这个概念的文章真寥寥无几首先是中英文名称翻译的问题其次是概念理解的不全面也就造成了网上的说法不一看了之后各种被误导。当然如果你在阅读文章的时候发现存在问题欢迎留言批评指正但是我觉得你可能没有批评指正的机会先来说下概念数据归一化和标准化都属于数据特征无量纲的一种方式。无量纲指的是将不同规格的数据转换到同一规格或不同分布的数据转换到某个特定分布的需求称之为数据“无量纲化”。在模型训练过程中经过无量纲化之后的数据特征对于模型的求解有加速作用特别是对于需要计算梯度和矩阵的模型(例如逻辑回归中通过梯度下降求解损失函数)。另外在k近邻、聚类等算法中需要计算距离使用无量纲化可以提升模型精度避免异常值对整体的计算造成影响这个在后面会细说。数据的无量纲化可以是线性的也可以是非线性的。非线性的无量纲不太常用例如百分位数转换、应用特征功率转换等基本很少用到而常用的线性无量纲化主要包括 中心化处理和缩放处理在特征工程中比较常见。中心化的本质是 让所有记录减去一个固定值即让数据样本平移到某个位置。缩放的本质是 通过除以一个固定值将数据固定在某个范围之中。下面来细说数据归一化 重要!! 数据归一化的英文翻译有两种Normalization 和 Min-Max Scaling数据归一化是当数据 x 按照最小值中心化后再按极差(最大值-最小值)进行缩放。最终的数据移动了最小值个单位并且会被收敛到 [0,1] 之间。归一化的公式如下这里一定要注意的是Normalization 是归一化的意思并不是正则化而正则化的英文翻译应该是Regularization但是正则化并不是数据处理的一种手段。代码实现常用的特征无量纲化方法都已经在 sklearn 中实现可以直接调用一般都是在基于 sklearn 下的 preprocessing 模块。归一化的实现可以调用 MinMaxScaler 函数当然你也可以自己实现公式也都在上面列出来了。MinMaxScaler 有一个重要参数feature_range默认值 [0,1] 表示将数据收敛到 [0,1] 之间。MinMaxScaler 可以手动设置但是一般情况都是选择默认值具体的进行特征归一化的代码实现如下import numpy as npfrom sklearn.preprocessing import MinMaxScaler# 创建数组data_rn np.random.randint(-10, 10, 10).reshape(5, 2)print(data_rn)# 进行标准归一化scaler_mms MinMaxScaler()result_mms scaler_mms.fit_transform(data_rn)print(result_mms)# 手动设置收敛区间[1,3]scaler_mms_parm MinMaxScaler(feature_range(1, 3))result_mms_parm scaler_mms_parm.fit_transform(data_rn)print(result_mms_parm)输出[[-10 7] [ 1 9] [ -3 -5] [ -9 -6] [ -8 5]][[0. 0.86666667] [1. 1. ] [0.63636364 0.06666667] [0.09090909 0. ] [0.18181818 0.73333333]][[1. 2.73333333] [3. 3. ] [2.27272727 1.13333333] [1.18181818 1. ] [1.36363636 2.46666667]]可以看到手动设置的收敛范围其实就是在 [0,1] 的基础上进行了相应的平移和缩放。就比如上面手动设置的 [1,3] 就是在 [0,1] 的基础上先缩放 2 变成 [0,2] 再平移 1 变成 [1,3]。所以要想归一化的结果收敛至任意一组值 [a,b] 之间则归一化的公式变成对应的在 MinMaxScaler 函数调用中只需要设置 feature_range 的取值为 (a,b) 即可。数据标准化 数据标准化的英文翻译Standardization又称 Z-score normalization。数据标准化是指当数据 x 按均值 μ 中心化后再按标准差 σ 缩放数据就会服从均值为 0方差为 1 的标准正态分布这个过程就叫做数据标准化。数据标准化的公式如下有一点需要注意标准化并不会改变数据的分布。之所以会说标准化之后数据变成标准正态分布是因为原始的数据就是符合正态分布的只不过并不是标准正态分布。另外大家会把标准化和正态分布联系起来是因为实际中大多数数据都是正态分布的或者近似正态分布。所以在标准化之后数据就会变成标准正态分布。不是说原本未知分布在标准化之后就可以凭空变成正态分布的。代码实现具体的进行特征标准化的代码实现如下import numpy as npfrom sklearn.preprocessing import StandardScaler# 创建数组data_rn np.random.randint(-10, 10, 10).reshape(5, 2)# 进行标准化print(data_rn)scaler_ss StandardScaler()result_ss scaler_ss.fit_transform(data_rn)print(result_ss)输出[[-10 7] [ 1 9] [ -3 -5] [ -9 -6] [ -8 5]][[-1.00803226 0.79859571] [ 1.63205223 1.11803399] [ 0.67202151 -1.11803399] [-0.76802458 -1.27775313] [-0.5280169 0.47915742]]另外也可以通过 inverse_transform 函数将标准化后的数据进行逆转# 标准化后的数据逆转data_inverse scaler_ss.inverse_transform(result_ss)对于 StandardScaler 和 MinMaxScaler 来说空值 NAN 会被当作是缺失值在 fit_transform 的时候继续保持缺失状态。标准化和归一化的区别与联系 首先需要明确很重要的一点归一化和标准化都不会改变数据的分布。它们都是对于数据的线性无量纲化通过相应的缩放和平移使得数据发生改变的过程但是并没有改变原始数据的排列顺序。其中归一化 Normalization 会严格的限定数据变化后的范围默认的是将数据控制在 [0,1] 之间。而标准化 Standardization 之后的数据没有严格的区间变化之后的数据没有范围只是数据整体的均值为 0标准差为 1另外归一化缩放的比例仅仅和极值有关而标准化缩放的比例和整体数据集有关。所以对于存在异常数据的样本来说用归一化并不是一个聪明的决定比如有一批样本取值是 0~10突然加入异常值 99 再进行归一化之后正确样本的数值将会变得很小这个时候使用标准化的效果会优于归一化。数据处理的时候选哪个 只能说针对情况选择。在大多数机器学习算法中因为 MinMaxScaler 对异常值的敏感所以都会选择 StandardScaler 进行特征缩放。例如聚类、逻辑回归、支持向量机、PCA 等算法。但是如果在缩放的时候不涉及距离、梯度等的计算并且对数据的范围有严格要求就可以使用归一化进行缩放。并不是所有模型的数据都需要标准化和归一化的。类似决策树模型在节点分裂的时候计算的是信息增益标准化后并不能大幅提高模型的计算速度【可能会有很小的提升】类似概率模型并不关心变量的值只关心变量的分布和变量之间的条件概率。综上一般在特征无量纲化的时候如果没有硬性规定【缩放范围、距离计算等】可以先使用标准化效果不好再试试归一化。我是东哥最后给大家分享《100本Python电子书》包括Python编程技巧、数据分析、爬虫、Web开发、机器学习、深度学习。现在免费分享出来有需要的读者可以下载学习在下面的公众号「GitHuboy」里回复关键字Python就行。推荐阅读像Excel一样使用SQL进行数据分析吹爆了这个可视化神器上手后直接开大~再见360安全卫士别去送死了Selenium 能被网站探测的几十个特征Pandas用了一年这3个函数是我最爱…逻辑回归 GBDT模型融合实战爱点赞的人运气都不会太差