2017-01-18 7 views
0

私はSpark MLを使用してKMeansを実行したいと思います。Kmeans Spark ML

val spark = SparkSession.builder.master("local").appName("my-spark-app").getOrCreate() 
    // Start time 
    //val intial_Data=spark.read.option("header",true).csv("C://sample_lda_data.txt") 
    val dataset = spark.read.format("libsvm").load("C:\\spark\\data\\mllib\\sample_kmeans_data.txt") 
    // Trains a k-means model. 
    val kmeans = new KMeans().setK(2).setSeed(1L) 
    val model = kmeans.fit(dataset) 

    // Evaluate clustering by computing Within Set Sum of Squared Errors. 
    val WSSSE = model.computeCost(dataset) 
    println(s"Within Set Sum of Squared Errors = $WSSSE") 

    // Shows the result. 
    println("Cluster Centers: ") 
    model.clusterCenters.foreach(println) 

は、だから私はcsvファイルを使用し、スパークMLで関数kmeansを適用したいと思います。入力はLIBSVMのデータセットです。 私はこれをしなかった:

val intial_Data=spark.read.option("header",true).csv("C://sample_lda_data.txt") 
     val arrayCol= array(inputData.columns.drop(1).map(col).map(_.cast(DoubleType)): _*) 
        import spark.implicits._ 
        // select array column and first column, and map into LabeledPoints 
        val result = inputData.select(col("col1").cast(DoubleType), arrayCol).map(r => LabeledPoint(r.getAs[Double](0),Vectors.dense(r.getAs[WrappedArray[Double]](1).toArray))) 
        // Trains a k-means model 
        val kmeans = new KMeans().setK(2) 
     val model = kmeans.fit(result) 
      // Evaluate clustering by computing Within Set Sum of Squared Errors. 
     val WSSSE = model.computeCost(dataset) 
     println(s"Within Set Sum of Squared Errors = $WSSSE") 

     // Shows the result. 
     println("Cluster Centers: ") 
     model.clusterCenters.foreach(println) 

は私がDataset[LabledPoint]にcsvファイルを有効にしてみました。

私の変換は正しいですか?

+1

新しいAPIを使用すると、csvを 'DataSet [LabeledPoint] 'に変換する必要はありません。ただ単に' VectorAssembler'で取得できるすべての機能を持つ1つのカラムが必要です。 私はここに例を書いています(https://github.com/BenFradet/spark-ml/blob/master/chapter7/src/main/scala/io/github/benfradet/spark/ml/in/action/GitHubKMeans)。 .scala)。 – BenFradet

+0

@BenFradetこんにちは、あなたのメッセージに気づいただけで、たくさんの友人、別の質問がありました。私は何をしますか? – user7394882

+1

どういう意味ですか?「カラム名ラベルを取得するのはどうですか? – BenFradet

答えて

0

MLlibではなくspark 2では、MLパッケージを使用しています。どのワークオンデータセットとMLフローがパイプラインモデルで機能するか。あなたは何をする必要がありますUは、データセットを作成し、2つの列の機能、ラベルを作る必要があります。フィーチャは、アルゴにフィードするために必要なフィーチャのベクトルです。他の列ラベルは、ターゲット列です。機能列を作成するには、使用したいすべての機能をアセンブルするためにベクトルアセンブラを使用するだけです。ターゲットcolunmを持っている場合、それをラベルとして名前を変更します。このデータセットをalgoにフィッティングした後、あなたのモデルを取得します。

関連する問題