5 Introducing the ML Package
在前面,我们使用了Spark中严格基于RDD的MLlib包。 在这里,我们将基于DataFrame使用MLlib包。 另外,根据Spark文档,现在主要的Spark机器学习API是spark.ml包中基于DataFrame的一套模型。
5.1 ML包的介绍
从顶层上看,ML包主要包含三大抽象类:转换器、预测器和工作流。
5.1.1 转换器(Transformer)
从Transformer抽象类派生出来的每一个新的Transformer都需要实现一个.transform(…) 方法,该方法可以将一个DataFrame转换成另一个DataFrame。
在spark.ml.feature中有许多Transformer:
- Binarizer :给定一个阈值,该方法需要一个连续的变量将其转换为二进制。
- Bucketizer:分箱(分段处理):将连续数值转换为离散类别比如特征是年龄,是一个连续数值,需要将其转换为离散类别(未成年人、青年人、中年人、老年人),就要用到Bucketizer了。
- ChiSqSelector:对于分类目标变量(考虑到分类模型),此方法允许你预定义数量的特征(通过numTopFeatures参数指定)。 选择完成后,如方法的名称所示,使用卡方检验。 需要两步:首先,你需要.fit(…) 数据(为了这个方法可以计算卡方检验)。然后,调用.fit(…)方法(将你的DataFrame作为参数传递)返回一个可以用.transform(…)转换的ChiSqSelectorModel对象。
- CountVectorizer:将文本文档转换为单词计数的向量。当不存在先验字典时,Countvectorizer作为Estimator提取词汇进行训练,并生成一个CountVectorizerModel用于存储相应的词汇向量空间。该模型产生文档关于词语的稀疏表示,其表示可以传递给其他算法,
- HashingTF : 生成词频率向量。它采用词集合并将这些集合转换成固定长度的特征向量。在文本处理中,“一组词”可能是一袋词。 HashingTF使用散列技巧。通过应用散列函数将原始要素映射到索引,然后基于映射的索引来计算项频率。
- IDF : 此方法计算逆文档频率。需要注意的是文本首先要用向量表示,可以用HashingTF 或者 CountVectorizer。
- MinMaxScaler:最大-最小规范化,将所有特征向量线性变换到用户指定最大-最小值之间。但注意在计算时还是一个一个特征向量分开计算的。通常将最大,最小值设置为1和0,这样就归一化到[0,1]。Spark中可以对min和max进行设置,默认就是[0,1]。(不移动中心点)
- MaxAbsScaler:同样对某一个特征操作,各特征值除以最大绝对值,因此缩放到[-1,1]之间。且不移动中心点。不会将稀疏矩阵变得稠密。
- NGram :返回 n-grams,两个连续的序列词,或三个或更多。例如 [‘good’,’morning’, ‘Robin’, ‘Williams’] ,返回两个即 [‘good morning’, ‘morning Robin’, ‘Robin Williams’] 。
- Normalizer : 将某个特征向量(由所有样本某一个特征组成的向量)计算其p-范数,然后对该每个元素除以p-范数。将原始特征Normalizer以后可以使得机器学习算法有更好的表现。(默认是L2)。
- PCA : 数据降维。
- RegexTokenizer:使用正则表达式。
- StandardScaler :将某个特征向量(由所有样本某一个特征组成的向量)进行标准化,使数据均值为0