1. 离散余弦变换
1.1 算法介绍
类别:transformer【转换器】
离散余弦变(DCT, Discrete Cosine Transform )换是与傅里叶变换相关的一种变换, 它类似于离散傅里叶变换, 但是只使用实数。
离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶数进行的(因为一个实偶数的傅里叶变换扔是一个实偶数)。
离散余弦变换经常被用于信号处理和图像处理方面。例如: 用于对信号和图像(包括静止图像和运动图像)进行有损数据压缩
1.2 代码示例
1 |
|
2. 字符串-索引变换
2.1 算法介绍
类别:estimator【评估器】
字符串-索引变换(String-Indexer) 转换器可以把一列类别型的特征(或标签)进行编码,使其数值化索引的范围是[0,numLables],按照标签出现频率排序, 所以出现最频繁的标签其指标为0。
该过程可以使得相应的特征索引化,使得某些无法接受类别型特征的算法可以使用,并提高诸如决策树等机器学习算法的效率。
如果输入的是数值型的,我们会把它转化成字符型,然后再对其进行编码,如果下游的管道节点需要使用字符串-索引编码, 则必须输入和转换为字符串- 指标列名
假设我们有DataFeame数据含有id和category两列:
| id | category |
|---|---|
| 0 | a |
| 1 | b |
| 2 | c |
| 3 | a |
| 4 | a |
| 5 | c |
category是有三种取值的字符串, 使用StringIndexer进行转换后我们可以得到如下输出
| id | category | cateforyIndex |
|---|---|---|
| 0 | a | 0.0 |
| 1 | b | 2.0 |
| 2 | c | 1.0 |
| 3 | a | 0.0 |
| 4 | a | 0.0 |
| 5 | c | 1.0 |
另外, 如果在转换新数据时出现了再训练中未出现的标签,StringIndexer将会报错(默认)或者跳过从未出现的标签实例。
2.2 代码示例
1 | package hnbian.spark.ml.feature.transforming |
3. 索引–字符串变换
3.1 算法说明
类别:estimator【评估器】
与StringIndexer相对应,IndexToString的作用是把标签索引的一列重新映射回原有的字符型标签。
IndexToString 主要使用场景一般都是和StringIndexer配合,先用StringIndexer将标签转化成标签索引,进行模型训练,然后在预测标签的时候再把标签索引转化成原有的字符标签。当然,你也可以另外定义其他的标签。
- 首先和StringIndexer的实验相同,我们用StringIndexer读取数据集中的“category”列,把字符型标签转化成标签索引,
- 然后输出到“categoryIndex”列上,构建出新的DataFrame。
3.2 代码示例
1 | package hnbian.spark.ml.feature.transforming |
4. 独热编码
4.1 算法说明
类别:estimator【评估器】
将在Spark 3.0 版本删除此算法
独热编码(One-Hot Encoding) 是指把一列类别性特征(或称名词性特征,nominal/categorical features)映射成一系列的二元连续特征的过程,
原有的类别性特征有几种可能取值,这一特征就会被映射成几个二元连续特征,
每一个特征代表一种取值,若该样本表现出该特征,则取1,否则取0。
One-Hot编码适合一些期望类别特征为连续特征的算法,比如说逻辑回归等。
4.2 代码示例
1 | package hnbian.spark.ml.feature.transforming |
5. 向量-索引变换
5.1 算法说明
类别:estimator【评估器】
之前介绍的StringIndexer是针对单个类别型特征进行转换,
倘若所有特征都已经被组织在一个向量中,又想对其中某些单个分量进行处理时,Spark ML提供了向量-索引变换(VectorIndexer)类来解决向量数据集中的类别性特征转换。
通过为其提供maxCategories超参数,它可以自动识别哪些特征是类别型的,并且将原始值转换为类别索引。它基于不同特征值的数量来识别哪些特征需要被类别化,那些取值可能性最多不超过maxCategories的特征需要会被认为是类别型的。
它的处理流程如下:
获得一个向量类型的输入以及maxCategories参数。
基于原始数值识别哪些特征需要被类别化, 其中最多maxCategories需要被类别化。
对于每一个类别特征计算0-based类别指标。
对类别特征进行索引然后将原始值转换为指标。
索引后的类别特征可以帮助决策树等算法处理类别特征, 并得到较好的结果。
在下面的例子中, 我们读入一个数据集, 然后使用VectorIndexer来决定哪些特征需要被作为非数值类型处理, 将非数值型特征转换为他们的索引。
5.2 代码示例
1 | package hnbian.spark.ml.feature.transforming |