2016-11-29 5 views
1

私はSpark(1.5.2)DataFramesを使用しており、階層化されたデータセットを取得しようとしています。私のデータは、バイナリ分類のために準備されており、2つのだけの値がコンソールにclass、1と0sampleByは非常に歪んだ結果を返す

val Array(trainingData, testData) = df.randomSplit(Array(0.7, 0.3)) 
val fractions: Map[Int, Double] = Map(1 -> 0.5, 0 -> 0.5) 

val trainingData3 = trainingData.stat.sampleBy("class", fractions, new Random().nextLong) 

println("Training True Class = " + trainingData3.where("class=1").count()) 
println("Training False Class = " + trainingData3.where("class=0").count()) 

私は0に、クラス1の大幅間違った割合を示す出力を得るためにあります

Training True Class = 799845 
Training False Class = 32797260 

答えて

2

RDDの場合、 'sampleByKeyExact'とsampleByKeyのように、DataFramesのsampleByに提供される割合は、最終結果セットで必要な割合ではありません。むしろ元のデータセットから維持したいパーセンテージです。

50/50分割を取得するには、完全なデータセットのクラス1とクラス0のカウントを比較し、比率を取得し、それらを使用して分数を選択する必要があります。

たとえば、レコードの98%がクラス0で2%がクラス1で、50/50の分割が必要な場合は、クラス1 = 100%、クラス0 = 2%の割合を使用できます。

val fractions: Map[Int, Double] = Map(1 -> 1.0, 0 -> 0.02) 
+0

これは探している可能性があります。http://stackoverflow.com/a/32241887/3415409 – eliasah

関連する問題