原标题:SparkMllib关于数值型特征的基本处理实践
在SparkMllib中主要分为特征抽取、特征转化、特征选择,特别是在特征转化方面是从一个DataFrame转化为另外一个DataFrame,在数值型数据处理的时候我们对机器学习数据集中的样本和特征部分进行单独的处理,这里就涉及对样本的正则化操作和数值型特征的归一化和标准化的方法,今天就带大家理解这一部分的思考和认识。
1.数据归一化
什么是数据的归一化?
答:数据的标准化是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。
为什么对数据归一化处理?
我们在对数据进行分析的时候,往往会遇到单个数据的各个维度量纲不同的情况,比如对房子进行价格预测的线性回归问题中,我们假设房子面积(平方米)、年代(年)和几居室(个)三个因素影响房价,其中一个房子的信息如下:
面积(S):150 平方米
年代(Y):5 年
这样各个因素就会因为量纲的问题对模型有着大小不同的影响,但是这种大小不同的影响并非反应问题的本质。
为了解决这个问题,我们将所有的数据都用归一化处理至同一区间内。
2.数据标准化
什么是标准化(StandardScaler)?
训练集中某一列数值特征(假设是第i列)的值缩放成均值为0,方差为1的状态。标准化之后,数据的范围并不一定是0-1之间,数据不一定是标准正态分布,因为标准化之后数据的分布并不会改变,如果数据本身是正态分布,那进行标准化之后就是标准正态分布。
1、归一化和标准化的相同点都是对某个特征(column)进行缩放(scaling)而不是对某个样本的特征向量(row样本数据)进行缩放。对行进行缩放是毫无意义的。比如三列特征:身高、体重、血压。每一条样本(row)就是三个这样的值,对这个row无论是进行标准化还是归一化都是无意义的,因为你不能将身高、体重和血压混到一起去。
2、标准化/归一化的好处
提升模型精度:基于距离的算法,例如Kmeans、KNN等,各个特征的量纲直接决定了模型的预测结果。举一个简单的例子,在KNN中,我们需要计算待分类点与所有实例点的距离。假设每个实例点(instance)由n个features构成。如果我们选用的距离度量为欧式距离,如果数据预先没有经过归一化,那么那些绝对值大的features在欧式距离计算的时候起了决定性作用。对于PCA,如果没有对数据进行标准化,部分特征的所占的信息可能会虚高。
提升收敛速度:例如,对于linear model来说,数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。对于SVM标准化之后梯度下降的速度加快。
3.标准化和归一化的对比分析
1、标准化/归一化的对比分析
首先明确,在机器学习中,标准化是更常用的手段。
MinMaxScaler对异常值非常敏感。例如,比如三个样本,某个特征的值为1,2,10000,假设10000这个值是异常值,用归一化的方法后,正常的1,2就会被“挤”到一起去。在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法