2016-07-01 4 views
0

そこに私のコードは、ハイブからの負荷データに、あり、そしてサンプルバランスを実行します。バイナリ分類にどのようにバランスサンプリングを選択できますか?

// Load SubSet Data 
val dataList = DataLoader.loadSubTrainTestData(hiveContext.sql(sampleDataHql)) 

// Split Data to Train and Test 
val data = dataList.randomSplit(Array(0.7, 0.3), seed = 11L) 

// Random balance train data 
val sampleCount = data(0).map(rec => (rec.label, 1)).reduceByKey(_ + _) 

val positiveSample = data(0).filter(_.label == 1).cache() 
val positiveSize = positiveSample.count() 

val negativeSample = data(0).filter(_.label == 0).cache() 
val negativeSize = negativeSample.count() 

// Build train data 
val trainData = positiveSample ++ 
negativeSample.sample(withReplacement = false, 1.0 * positiveSize.toFloat/negativeSize, System.nanoTime()) 

// Data size 
val trainDataSize = positiveSize + negativeSize 
val testDataSize = trainDataSize * 3.0/7.0 

と私は、私はこのコードをテストしていません[OK]をモデルの信頼性を評価

+0

私はサンプルバランスによって何を意味するのか分かりません。私はそのようなことを聞​​いたことがない。あなたは何を達成しようとしていますか?あなたのデータは何ですか? – eliasah

+0

不均衡なトレーニングデータは、分類モデル –

+0

に影響します。これは、手元の仕事と訓練しようとしているモデルによって異なります。あなたが言っていることは、必ずしも真実ではありません。 – eliasah

答えて

2

ためtrainDataSizeとtestDataSizeを計算しますが、それはこのように行く必要があります。

val data: RDD[LabeledPoint] = ??? 

val fractions: Map[Double, Double] = Map(0.0 -> 0.5, 1.0 -> 0.5) 
val sampledData: RDD[LabeledPoint] = data 
    .keyBy(_.label) 
    .sampleByKeyExact(false, fractions) // Optionally with seed 
    .values 

あなたが使用したい画分を使用してsampleByKeyExactを適用するよりも、PairRDDsにあなたのLabeledPointを変換することができます。

+0

よろしくお願いします。 –

+0

OK、結果がある場合は、ここに貼り付けます –

関連する問題