Как преобразовать вектор ассемблера во фрейм данных? - PullRequest
0 голосов
/ 01 апреля 2019

Я просто использовал VectorAssembler, чтобы нормализовать свои функции для приложения ML.

def kmeansClustering ( k : Int ) : sql.DataFrame  = { 
    val assembler = new VectorAssembler()
        .setInputCols(this.listeOfName())
        .setOutputCol("features")
    val intermediaireDF = assembler
        .transform(this.filterNumeric())
        .select("features")
    val kmeans = new KMeans().setK(k).setSeed(1L)
    val model = kmeans.fit(intermediaireDF)
    val predictions = model.transform(intermediaireDF)
    return(predictions)
  }

, в результате я получил фрейм данных с двумя векторами:

+--------------------+----------+
|            features|prediction|
+--------------------+----------+
|[-27.482279,153.0...|         0|
|[-27.47059,153.03...|         2|
|[-27.474531,153.0...|         3| 
.................................

Итак, я хочувыполнить что-то вроде avg и std по группам для каждого столбца, но функции собраны, и я не могу манипулировать ими.

Я пытался использовать org.apache.spark.ml.feature.VectorDisassembler, но это не сработало.

 val disassembler = new VectorDisassembler().setInputCol("vectorCol")
 disassembler.transform(df).show()

Есть предложения?

1 Ответ

0 голосов
/ 02 апреля 2019

На самом деле вам не нужно удалять исходные столбцы для выполнения кластеризации.

// creating sample data
val df = spark.range(10).select('id as "a", 'id %3 as "b")

val assembler = new VectorAssembler()
    .setInputCols(Array("a", "b")).setOutputCol("features")

// Here I delete the select so as to keep all the columns
val intermediaireDF = assembler.transform(this.filterNumeric())

// I specify explicitely what the feature column is
val kmeans = new KMeans().setK( 2 ).setSeed(1L).setFeaturesCol("features")

// And the rest remains unchanged
val model = kmeans.fit(intermediaireDF)
val predictions = model.transform(intermediaireDF)

predictions.show(6)
+---+---+----------+----------+
|  a|  b|  features|prediction|
+---+---+----------+----------+
|  1|  0| [1.0,0.0]|         1|
|  2|  1| [2.0,1.0]|         1|
|  3|  2| [3.0,2.0]|         1|
|  4|  0| [4.0,0.0]|         1|
|  5|  1| [5.0,1.0]|         0|
|  6|  2| [6.0,2.0]|         0|
+---+---+----------+----------+

И оттуда вы можете вычислить то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...