文档详情

特征工程下有哪些常用处理函数一手资源.pdf

发布:2025-02-08约1.18万字共14页下载文档
文本预览下载声明

2021/11/1925|

特征工程一览SparkMLlib特征处理函数分类

在上一讲,我们着重讲解了其中的前3个环节,也就是预处理、特征选择和归一化。按照

之前的课程安排,今天这一讲,咱们继续来说说剩下的离散化、Embedding与向量计算。

特征工程是机器学习的重中之重,只要你耐心学下去,必然会不虚此行。这一讲的最后,

我还会对应用了6种不同特征工程的模型性能加以对比,帮你深入理解特征工程中不同环

节的作用与效果。

特征工程

特征工程进度打卡

2/15

2021/11/1925|

在上一讲,我们打卡到了“第三关”:归一化。因此,接下来,我们先从“第四关”:离

散化说起。

离散化:Bucketizer

与归一化一样,离散化也是用来处理数值型字段的。离散化可以把原本连续的数值打散,

从而降低原始数据的多样性(Cardinality)。举例来说,“BedroomAbvGr”字段的含义

是居室数量,在train.csv这份数据样本中,“BedroomAbvGr”包含从1到8的连续整

数。

现在,我们根据居室数量,把房屋粗略地划分为小户型、中户型和大户型。

BedroomAbvGr离散化

不难发现,“BedroomAbvGr”离散化,数据多样性由原来的8降低为现在的3。那

么问题来了,原始的连续数据好好的,为什么要对它做离散化呢?离散化的动机,主要在

于提升特征数据的区分度与内聚性,从而与预测标的产生更强的关联。

就拿“BedroomAbvGr”来说,我们认为一居室和两居室对于房价的影响差别不大,同

样,三居室和四居室之间对于房价的影响,也是微乎其微。

但是,小户型与中户型之间,以及中户型与大户型之间,房价往往会出现跃迁的现象。换

句话说,相比居室数量,户型的差异对于房价的影响更大、区分度更高。因此,

把“BedroomAbvGr”做离散化处理,目的在于提升它与预测标的之间的关联性。

3/15

2021/11/1925|

那么,在SparkMLlib的框架下,离散化具体该怎么做呢?与其他环节一样,Spark

MLlib提供了多个离散化函数,比如Binarizer、Bucketizer和QuantileDiscretizer。我

们不妨以Bucketizer为代表,结合居室数量“BedroomAbvGr”这个字段,来演示离散

化的具体用法。老规矩,还是先上代码为敬。

代码

1//原始字段

2valfieldBedroom:String=BedroomAbvGrInt

3//包含离散化数据的目标字段

4valfieldBedroomDiscret:String=BedroomDiscrete

5//指定离散区间,分别是[负无穷,2]、[3,4]和[5,正无穷]

6valsplits:Array[Doubl]=Array(Doubl.NegativeInfinity,3,5,Doubl.Positi

7

8importorg.apache.spark.ml.feature.Bucketizer

9

10//定义并初始化Bucketizer

11valbucketi

显示全部
相似文档