2017-07-19 4 views
-2

私は以下のようにScalaではデータフレームとしてCSVを読んでいます:スカラで特徴ベクトルを作成するには?

+-----------+------------+ 
|label | features | 
+-----------+------------+ 
| 0.0| 0.0| 
| 0.0| 33.0| 
| 0.0| 58.0| 
| 0.0| 96.0| 
| 0.0| 1.0| 
| 0.0| 21.0| 
| 0.0| 10.0| 
| 1.0| 65.0| 
| 1.0| 7.0| 
| 1.0| 28.0| 
+-----------+------------+ 
:出力としてある

val assembler = new VectorAssembler() 
    .setInputCols(Array("y")) 
    .setOutputCol("features") 


    val output = assembler.transform(daf).select($"x".as("label"), $"features") 

    println(output.show) 

:以下のようにその後、私はラベルと機能ベクトルを作成

+-----------+------------+ 
|x   |y   | 
+-----------+------------+ 
|   0|   0| 
|   0|   33| 
|   0|   58| 
|   0|   96| 
|   0|   1| 
|   1|   21| 
|   0|   10| 
|   0|   65| 
|   1|   7| 
|   1|   28| 
+-----------+------------+ 

これの代わりに、出力を次の形式のようにします。

+-----+------------------+ 
|label| features | 
+-----+------------------+ 
| 0.0|(1,[1],[0]) | 
| 0.0|(1,[1],[33]) | 
| 0.0|(1,[1],[58]) | 
| 0.0|(1,[1],[96]) | 
| 0.0|(1,[1],[1]) | 
| 1.0|(1,[1],[21]) | 
| 0.0|(1,[1],[10]) | 
| 0.0|(1,[1],[65]) | 
| 1.0|(1,[1],[7]) | 
| 1.0|(1,[1],[28]) | 
+-----------+------------+ 

私は

val assembler = new VectorAssembler() 
     .setInputCols(Array("y").map{x => "(1,[1],"+x+")"}) 
     .setOutputCol("features") 

を試みたが、うまくいきませんでした。 何か助けていただければ幸いです。

答えて

1

これはVectorAssemblerを使用する方法ではありません。

あなたが入力列の名前を与える必要があります。すなわち

new VectorAssembler().setInputCols(Array("features")) 

あなたが共有したデータを考慮すると、最終的に別の問題に直面します。それが1つの点であれば、あまりベクトルではありません。 (あなたのfeatures列)が

これは、2列以上で使用する必要があります。すなわち

new VectorAssembler().setInputCols(Array("f1","f2","f3")) 
+0

私たち[チャットでこの議論を続ける](http://chat.stackoverflow.com/rooms/149555/discussion-between-ricky-and-eliasah) – Ricky

関連する問題