$$ \newcommand{\R}{\mathbb{R}} \newcommand{\E}{\mathbb{E}} \newcommand{\x}{\mathbf{x}} \newcommand{\y}{\mathbf{y}} \newcommand{\wv}{\mathbf{w}} \newcommand{\av}{\mathbf{\alpha}} \newcommand{\bv}{\mathbf{b}} \newcommand{\N}{\mathbb{N}} \newcommand{\id}{\mathbf{I}} \newcommand{\ind}{\mathbf{1}} \newcommand{\0}{\mathbf{0}} \newcommand{\unit}{\mathbf{e}} \newcommand{\one}{\mathbf{1}} \newcommand{\zero}{\mathbf{0}} \newcommand\rfrac[2]{^{#1}\!/_{#2}} \newcommand{\norm}[1]{\left\lVert#1\right\rVert} $$

多项式特征转换

描述

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

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

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

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

操作

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

拟合

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

转换

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

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

参数

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

                       
参数描述
自由度

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

例子

// 获取训练数据集
val trainingDS: DataSet[LabeledVector] = ...

// 设置一个自由度为 3 的多项式特征转换器
val polyFeatures = PolynomialFeatures()
.setDegree(3)

// 设置一个复线性回归学习器
val mlr = MultipleLinearRegression()

// 通过参数映射 (ParameterMap) 控制学习器
val parameters = ParameterMap()
.add(MultipleLinearRegression.Iterations, 20)
.add(MultipleLinearRegression.Stepsize, 0.5)

// 创建管道 (pipeline) PolynomialFeatures -> MultipleLinearRegression
val pipeline = polyFeatures.chainPredictor(mlr)

// 训练模型
pipeline.fit(trainingDS)