Pet*_*ter 1 scala apache-spark
我正在使用 Spark (1.5.2) DataFrames 并尝试获取分层数据集。我的数据已准备好进行二元分类,并且只有class
1 和 0 两个值。
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())
Run Code Online (Sandbox Code Playgroud)
在控制台上,我得到的输出显示 1 类与 0 类的比率非常不正确:
Training True Class = 799845
Training False Class = 32797260
Run Code Online (Sandbox Code Playgroud)
为 DataFrame提供的分数sampleBy
(与“sampleByKeyExact”和sampleByKey
RDD 一样)不是您在最终结果集中想要的百分比。相反,它是您希望从原始数据集中保留的百分比。
要获得 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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
690 次 |
最近记录: |