美文网首页
Spark Mllib PCA降维

Spark Mllib PCA降维

作者: LZhan | 来源:发表于2019-07-19 14:30 被阅读0次

    与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的特征列。

    相关文章

      网友评论

          本文标题:Spark Mllib PCA降维

          本文链接:https://www.haomeiwen.com/subject/nmajlctx.html