Spark Mllib PCA降维

2019-07-19  本文已影响0人  LZhan

与sk_learn相比,spark mllib的PCA降维方法,只能设置最终降维的维数。


image.png

实例demo:

 val spark = SparkSession.builder()
      .master("local[2]")
      .appName("Spark Mllib")
      .getOrCreate()


    val df = spark.createDataFrame(Seq(
      (0, 1.2), (1, 2.3), (2, 4.4), (3, 5.4), (4, 3.7), (5, 99.5)
    )).toDF("id", "category")

    //    //多列合并成1列
    //    import spark.implicits._
    //    val df_pca=df.map(_.toSeq.foldLeft("")(_+","+_).substring(1)).toDF("features")
    //
    //    df_pca.show()

    //将多列合并成1列Vector
    //VectorAssembler不支持合并String类型
    val assembler1 = new VectorAssembler().
      setInputCols(df.columns).
      setOutputCol("features")

    val df_pca = assembler1.transform(df)

    val pca = new PCA()
      .setInputCol("features")
      .setOutputCol("pcaFeatures")
      .setK(1)
      .fit(df_pca)

    val rs = pca.transform(df_pca)
    rs.show()

踩坑:
1.Spark MLlib提供的PCA变换方法最多只能处理65535维的数据
2.在做PCA降维之前,我们需要将数据集的特征合并为1列,
一开始在实际中,合并为一列的方法就是以字符串相隔,将多个列拼接起来,是String类型;
但是PCA所接受的参数类型只能是Vector,所以这里合并为1列的方法,最好还是使用VectorAssembler()方法。
3.还需要注意的是VectorAssembler进行列合并时,不能有类型为String的特征列。

上一篇下一篇

猜你喜欢

热点阅读