多项式特征转换

描述

多项式特征转换器 (polynomial features transformer) 能把一个向量映射到一个自由度为 $d$ 的多项式特征空间。 输入特征的维度决定了多项式因子的个数,多项式因子的值就是每个向量的项。 给定一个向量 $(x, y, z, \ldots)^T$,那么被映射的特征向量为:

(x,y,z,x2,xy,y2,yz,z2,x3,x2y,x2z,xy2,xyz,xz2,y3,)T\left(x, y, z, x^2, xy, y^2, yz, z^2, x^3, x^2y, x^2z, xy^2, xyz, xz^2, y^3, \ldots\right)^T

Flink 的实现以自由度降序的方式给多项式排序。

如果一个向量为 $\left(3,2\right)^T$,自由度为 3 的多项式特征向量为:

(33,322,322,23,32,32,22,3,2)T\left(3^3, 3^2\cdot2, 3\cdot2^2, 2^3, 3^2, 3\cdot2, 2^2, 3, 2\right)^T

该转换器能够前置于所有 TransformerPredictor 的实现,这些实现的输入需要是 LabeledVector 类或者 Vector 的子类。

操作

PolynomialFeatures 是一个 Transformer (转换器)。 因此,它支持 fit (拟合) 和 transform (转换) 操作。

拟合

PolynomialFeatures 并不对数据进行训练,因此它支持所有类型的输入数据。

转换

PolynomialFeatures 把所有 VectorLabeledVector 的子类转换成各自的类型,如下所示:

  • transform[T <: Vector]: DataSet[T] => DataSet[T]
  • transform: DataSet[LabeledVector] => DataSet[LabeledVector]

参数

多项式特征转换器可以由以下参数控制:

参数 描述
自由度

最大多项式自由度. (默认值: 10)

例子

  1. // 获取训练数据集
  2. val trainingDS: DataSet[LabeledVector] = ...
  3. // 设置一个自由度为 3 的多项式特征转换器
  4. val polyFeatures = PolynomialFeatures()
  5. .setDegree(3)
  6. // 设置一个复线性回归学习器
  7. val mlr = MultipleLinearRegression()
  8. // 通过参数映射 (ParameterMap) 控制学习器
  9. val parameters = ParameterMap()
  10. .add(MultipleLinearRegression.Iterations, 20)
  11. .add(MultipleLinearRegression.Stepsize, 0.5)
  12. // 创建管道 (pipeline) PolynomialFeatures -> MultipleLinearRegression
  13. val pipeline = polyFeatures.chainPredictor(mlr)
  14. // 训练模型
  15. pipeline.fit(trainingDS)