标准化、归一化、中心化

标准化、归一化、中心化

数据分析及挖掘中常提到的几个概念(数据的 标准化、归一化、中心化),虽然经常在用,但可能还是有一些比较生僻的知识容易搞混淆,所以在十月国庆大家都出门上高速堵车的时候抽了点时间对这些概念以我的能力和理解做一个相对系统和浅显的总结。

本篇文章通过个人以前对这些知识的一个先验理解,然后主要查阅和参考了数篇相关知识文档的介绍后,做了如下的总结。(注:尤其是标准化、归一化极容易混淆两者)

标准化:

特点:

对不同特征维度的数据做伸缩变换(数据按比例缩放,使之落入一个小的特定区间),其目是使不同度量之间的特征具有可比性。并且同时不改变原始数据的分布状态。转化为无量纲的纯数值后,便于不同单位或量级的指标能够进行比较和加权。

优点:

1:使得不同度量之间的特征具有可比性;对目标函数的影响体现在几何分布(离散型概率分布)上,而不是数值上

2:不改变原始数据的分布

举例:

根据人的身高和体重预测人的健康指数,假设有如下原始数据是四维:

 

从上面两个坐标图可以看出,样本在数据值上的分布差距是不一样的,但其几何距离是一致的。而标准化就是一种对样本数据在不同维度上进行一个伸缩变化(而不改变数据的几何距离),也就是不改变原始数据的信息(分布)。这样的好处就是在进行特征提取时,忽略掉不同特征之间的一个度量,而保留样本在各个维度上的信息(分布)

 

归一化:

特点:

对不同特征维度的数据做伸缩变换,其目的是使得各个特征维度对目标函数的影响权重是一致的,即使得那些扁平分布得数据伸缩变换成类圆形。这也就改变了原始数据的一个分布。

优点:

1:提高迭代求解的收敛速度

2:提高迭代求解的精度

举例:

从采用大单位的身高和体重这两个特征来看,如果采用标准化,不改变样本在这两个维度上的分布,则左图还会保持二维分布的一个扁平性;而采用归一化则会在不同维度上对数据进行不同的伸缩变化(归一区间,会改变数据的原始距离,分布,信息),使得其呈类圆形。虽然这样样本会失去原始的信息,但这防止了归一化前直接对原始数据进行梯度下降类似的优化算法时最终解被数值大的特征所主导。归一化后,各个特征对目标函数的影响权重是一致的。这样的好处是在提高迭代求解的精度。

1、 归一化为什么能提高梯度下降法求解最优解的速度?

当两个特征X1和X2的区间相差非常大,X1区间是[0,2000],X2区间是 [1,5],其所形成的等高线非常尖。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛。因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。

2、归一化有可能提高精度

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

 

修改总结原作者对提问者的回答如下:

问题:

归一化和标准化,都是将点平移然后缩短距离,从这个角度看,二者有什么区别呢?为什么标准化不改变数据分布(几何距离)?

回答:

第一,如果把加减看作平移,乘除看作放缩的话,那么从归一化和标准化的公式就能看出两者的区别。平移对于前者以一个最小值为参照,后者以均值为参照。缩放对于前者以最大差值参照,后者以标准差。第二,标准化不改变几何距离是其公式定义的原因,可以进行数学推导,类似于SVM的函数距离到几何距离,由公式可以推导。

以上对两个容易混淆的概念(标准化、归一化)做了一个解释,但是需要根据实际的数据或场景需求来使用,以免适得其反,如:归一化后虽然平衡了权重,但也会或多或少破坏数据的结构。

 

常用的标准化方法(z-score标准化):

需要注意上面的s为n-1,不是n,两者的区别z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况

常用的归一化方法(Min-max normalization、最大最小归一化):

当然还有对于两种方式其它好的解法,后面链接可以参考。

 

中心化:

这里以PCA为例讲述中心化:

下面两幅图是数据做中心化(centering)前后的对比,可以看到其实就是一个平移的过程,平移后所有数据的中心是(0,0),同时中心化后的数据对向量也容易描述,因为是以原点为基准的。

在做PCA的时候,我们需要找出矩阵的特征向量,也就是主成分(PC)。比如说找到的第一个特征向量是a = [1, 2],a在坐标平面上就是从原点出发到点(1,2)的一个向量。

如果没有对数据做中心化,那算出来的第一主成分的方向可能就不是一个可以“描述”(或者说“概括”)数据的方向了。还是看图比较清楚。

黑色线就是第一主成分的方向。只有中心化数据之后,计算得到的方向才能比较好的“概括”原来的数据。这里通过中心化后主成分组成的基能更好的表示原数据。

对于中心化与标准化的区别:

  1. 对数据进行中心化预处理,这样做的目的是要增加基向量的正交性

  2. 对数据标准化的目的是消除特征之间的差异性。便于对一心一意学习权重。

下图中以二维数据为例:左图表示的是原始数据;中间的是中心化后的数据,数据被移动大原点周围;右图将中心化后的数据除以标准差,得到为标准化的数据,可以看出每个维度上的尺度是一致的(红色线段的长度表示尺度)

常用的中心化方法:

变量减去它的均值

 

 

文中若有不足或有误的地方,还请指出。感谢以下资料,本文主要参考:

https://www.zhihu.com/question/20467170

https://en.wikipedia.org/wiki/Feature_scaling

https://www.zhihu.com/question/37069477

https://blog.csdn.net/bbbeoy/article/details/70185798

03-26
### 逆向工程与反编译概述 逆向工程是一种通过对软件的目标代码进行分析,将其转化为更高级别的表示形式的过程。这一过程通常用于研究现有系统的内部结构、功能以及实现细节。在Java和Android领域,反编译工具被广泛应用于逆向工程中。 #### Java逆向工程中的Jad反编译工具 Jad是一款经典的Java反编译工具,能够将`.class`字节码文件转换为可读的`.java`源代码[^1]。虽然它可能无法完全恢复原始源代码,但它提供了足够的信息来帮助开发者理解已编译的Java程序逻辑。Jad支持多种反编译模式,并允许用户自定义规则以适应不同的需求。此外,其命令行接口和图形界面使得复杂代码的分析变得更加便捷。 #### Android逆向工程中的JEB反编译工具 针对Android应用的逆向工程,JEB是由PNF Software开发的一款专业级工具[^2]。相较于其他同类产品,JEB不仅具备强大的APK文件反编译能力,还能对Dalvik字节码执行高效而精准的操作。它的核心优势在于以下几个方面: - **广泛的平台兼容性**:除Android外,还支持ARM、MIPS等多种架构的二进制文件反汇编。 - **混淆代码解析**:内置模块能有效应对高度混淆的代码,提供分层重构机制以便于深入分析。 - **API集成支持**:允许通过编写Python或Java脚本来扩展功能并完成特定任务。 #### APK反编译流程及其意义 当涉及到具体的APK包时,可以通过一系列步骤提取其中的信息来进行全面的安全评估或者学习目的的研究工作[^3]。这些步骤一般包括但不限于获取资产目录(`assets`)内的资源数据;解密XML配置文档如`AndroidManifest.xml`定位应用程序启动点;最后利用上述提到的各种专用软件重现整个项目框架供进一步探讨。 ```bash # 使用apktool反编译APK示例 apktool d your_app.apk -o output_directory/ ``` 以上命令展示了如何借助开源工具ApkTool轻松拆卸目标安卓档案至易于探索的状态下。 ### 结论 无论是传统的桌面端还是现代移动端环境里头,恰当运用合适的反编译解决方案都是达成逆向工程项目成功不可或缺的一环。每种工具有各自专精之处,在实际应用场景当中应当依据具体需求做出明智的选择。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值