Polynomial expansion是一个将特征展开到多元空间的处理过程,
运用于特征值进行一些多项式的转化,比如平方啊,三次方 。 它通过n-degree
结合原始的维度来定义。比如设置degree
为2就可以将(x, y)
转化为(x, x x, y, x y, y y)
。PolynomialExpansion
提供了这个功能。 下面的例子展示了如何将特征展开为一个3-degree
多项式空间。
// $example on$ import org.apache.spark.SparkConf import org.apache.spark.ml.feature.PolynomialExpansion import org.apache.spark.ml.linalg.Vectors // $example off$ import org.apache.spark.sql.SparkSession object PolynomialExpansionExample { def main(args: Array[String]): Unit = { val sparkConf = new SparkConf(); sparkConf.setMaster("local[*]").setAppName(this.getClass.getSimpleName) val spark = SparkSession .builder .config(sparkConf) .appName("PolynomialExpansionExample") .getOrCreate() // $example on$ val data = Array( Vectors.dense(2.0, 1.0), Vectors.dense(0.0, 0.0), Vectors.dense(3.0, -1.0) ) val df = spark.createDataFrame(data.map(Tuple1.apply)).toDF("features") //setDegree表示多项式最高次幂 比如1.0,5.0可以是 三次:1.0^3 5.0^3 1.0+5.0^2 二次:1.0^2+5.0 1.0^2 5.0^2 1.0+5.0 一次:1.0 5.0 val polyExpansion = new PolynomialExpansion() .setInputCol("features") .setOutputCol("polyFeatures") .setDegree(3) val polyDF = polyExpansion.transform(df) polyDF.show(false) // $example off$ spark.stop() } }
输出结果为:
+---+---------+-----------------------------------------------+
|id |features |Polynomial_features |
+---+---------+-----------------------------------------------+
|0 |[1.0,5.0]|[1.0,1.0,1.0,5.0,5.0,5.0,25.0,25.0,125.0] |
|1 |[2.0,1.0]|[2.0,4.0,8.0,1.0,2.0,4.0,1.0,2.0,1.0] |
|2 |[4.0,8.0]|[4.0,16.0,64.0,8.0,32.0,128.0,64.0,256.0,512.0]|
+---+---------+-----------------------------------------------+