2017-03-10 10 views
2

spark ml/mllibドキュメントを参照すると、それらはすべてsvmストアド・サンプルから始まります。これは、標準のRDD [行]またはデータフレーム(「テーブル」選択か​​ら取得したもの)を最初に格納することなくこの表記法に移行する直接的な方法ではないように思われるため、実際には悔しいことです。spark:データフレームをsvmラベル付けされたポイントに変換する

これは3つの機能を扱う場合には不便ですが、それを多くの機能にまで拡張すると、多くの入力と検索が行われることになります。

私はこのようなものになってしまった:(「電車」がテーブルに格納されている機能/ Wデータセットのランダムな分割です)

val trainLp = train.map(row => LabeledPoint(row.getInt(0).toDouble, Vectors.dense(row(8).asInstanceOf[Int].toDouble,row(9).asInstanceOf[Int].toDouble,row(10).asInstanceOf[Int].toDouble,row(11).asInstanceOf[Int].toDouble,row(12).asInstanceOf[Int].toDouble,row(13).asInstanceOf[Int].toDouble,row(14).asInstanceOf[Int].toDouble,row(15).asInstanceOf[Int].toDouble,row(18).asInstanceOf[Int].toDouble,row(21).asInstanceOf[Int].toDouble,row(27).asInstanceOf[Int].toDouble,row(28).asInstanceOf[Int].toDouble,row(29).asInstanceOf[Int].toDouble,row(30).asInstanceOf[Int].toDouble,row(31).asInstanceOf[Double],row(32).asInstanceOf[Double],row(33).asInstanceOf[Double],row(34).asInstanceOf[Double],row(35).asInstanceOf[Double],row(36).asInstanceOf[Double],row(37).asInstanceOf[Double],row(38).asInstanceOf[Double],row(39).asInstanceOf[Double],row(40).asInstanceOf[Double],row(41).asInstanceOf[Double],row(42).asInstanceOf[Double],row(43).asInstanceOf[Double]))) 

これらの行は、傾向があるので、これは、維持するために悪夢でありますかなり頻繁に変更する。

ここで私はラベル付けされたポイントを取得する段階にありますが、私はこのデータのSVMを保存したバージョンでさえありません。

ここで私は何が悲惨な日々を救うことができますか?

EDIT:

私は何かを使用して一歩近づく解になったが、通常私のベクトル

+0

を介して動作私はpsparkを使用してexacttly同じfrusterating問題、イムを持っています –

答えて

0

を構築するvectorassemblerと呼ばれる、CSVファイルには、情報の生の、フィルタリングされていないソースです。多くの場合、元の情報源を提供します。

モデルを構築するには、モデルを作成する前に、データのクレンジング、データ準備、データの暴走(およびおそらくは「データx」の表現)の段階を経ることが通常です。この段階では通常、モデルビルディングの大きな部分が必要になり、通常はデータの探索が必要になります。通常、元のデータとモデルを構築するデータとの間で、変換および機能選択(および作成)のプロセスが発生します。

あなたのCSVファイルにこれらの予備段階が必要ない場合は、あなたにおすすめです! モデルを構築する特定の列または列のインデックスを追跡できる構成ファイルをいつでも作成できます。

DataFrameが「選択」に由来する場合、わかりやすさと保守性を向上させるためにできることは、インデックス番号の代わりに列名を使用することだと思います。

df.select($"my_col_1", $"my_col_2", ..) 

、その後

row.getAs[String]("my_col_1") 
関連する問題