- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用以下方法将数据集拆分为训练和非训练
inDataSet.randomSplit(weights.toArray, 0)
每次运行,我都会得到不同的结果。这是预期的吗?如果是这样,我怎样才能每次都获得相同百分比的行?
例如:Training Offer 随机拆分的权重为:ArrayBuffer(0.3, 0.7) - 为此我总共有 72 行,权重为 0.3,我预计大约有 21 行。有时我得到 23、29、19、4。请指导。
注意:我给的总权重1.0(0.3 + 0.7)不是为了归一化。
-- 另一个问题很有用,但那是在单次执行中。我运行了 N 次测试,每次都得到不同的结果集。
最佳答案
我输入的一个可能的实现(类似于第二条评论中的链接):
def doTrainingOffer(inDataSet: Dataset[Row],
fieldName: String,
training_offer_list: List[(Long, Long, Int, String, String)]):
(Dataset[Row], Option[Dataset[Row]]) = {
println("Doing Training Offer!")
val randomDs = inDataSet
.withColumn("row_id", rank().over(Window.partitionBy().orderBy(fieldName)))
.orderBy(rand)
randomDs.cache()
val count = randomDs.count()
println(s"The total no of rows for this use case is: ${count}")
val trainedDatasets = new mutable.ArrayBuffer[Dataset[Row]]()
var startPos = 0l
var endPos = 0l
for (trainingOffer <- training_offer_list) {
val noOfRows = scala.math.round(count * trainingOffer._3 / 100.0)
endPos += noOfRows
println(s"for training offer id: ${trainingOffer._1} and percent of ${trainingOffer._3}, the start and end are ${startPos}, ${endPos}")
trainedDatasets += addTrainingData(randomDs.where(col("row_id") > startPos && col("row_id") <= endPos), trainingOffer)
startPos = endPos
}
val combinedDs = trainedDatasets.reduce(_ union _)
// (left over for other offer, trainedOffer)
(randomDs.join(combinedDs, Seq(field_name), "left_anti"), Option(combinedDs))
}
还有另一种可能的实现方式::
val randomDs = inDataSet.orderBy(rand)
randomDs.cache()
val count = randomDs.count()
println(s"The total no of rows for this use case is: ${count}")
val trainedDatasets = new mutable.ArrayBuffer[Dataset[Row]]()
for (trainingOffer <- training_offer_list) {
if (trainedDatasets.length > 1) {
val combinedDs = trainedDatasets.reduce(_ union _)
val remainderDs = randomDs.join(combinedDs, Seq(field_name), "left_anti")
trainedDatasets += addTrainingData(remainderDs.limit(scala.math.round(count * trainingOffer._3 / 100)), trainingOffer)
}
else if (trainedDatasets.length == 1) {
val remainderDs = randomDs.join(trainedDatasets(0), Seq(field_name), "left_anti")
trainedDatasets += addTrainingData(remainderDs.limit(scala.math.round(count * trainingOffer._3 / 100)), trainingOffer)
}
else {
val tDs = randomDs.limit(scala.math.round(count * trainingOffer._3 / 100))
trainedDatasets += addTrainingData(tDs, trainingOffer)
}
}
val combinedDs = trainedDatasets.reduce(_ union _)
// (left over for other offer, trainedOffer)
(randomDs.join(combinedDs, Seq(field_name), "left_anti"), Option(combinedDs))
关于apache-spark - Spark randomSplit - 每次运行的结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50979024/
我在 PySpark 中有一个相当大的数据框 (100GB),我想将其拆分为训练集、测试集和验证集。这是关键,我在它工作之前已经完成了,但是这次尝试它时,它返回的数据帧的所有值都从实际值更改为 1 或
我正在尝试使用以下方法将数据集拆分为训练和非训练 inDataSet.randomSplit(weights.toArray, 0) 每次运行,我都会得到不同的结果。这是预期的吗?如果是这样,我怎样才
假设我有类似下面的代码 for idx in xrange(0, 10): train_test_split = training.randomSplit(weights=[0.75, 0.2
这个问题解释了 Spark 的随机拆分是如何工作的,How does Sparks RDD.randomSplit actually split the RDD ,但我不明白 spark 如何跟踪第一
这个问题解释了Spark的随机分割是如何工作的,How does Sparks RDD.randomSplit actually split the RDD ,但我不明白 Spark 如何跟踪哪些值进
嗨,我是 MLlib 的新手,我正在阅读 Spark 网站上有关它的文档。我很难理解为什么在下面的代码中我们需要缓存“0”用于训练和“1”用于测试: val splits = data.rando
所以假设我有一个包含 3000 行的 rdd。前 2000 行属于 1 类,最后 1000 行属于 2 类。RDD 分为 100 个分区。 调用RDD.randomSplit(0.8,0.2)时 该函
我用我的数据创建了一个 DataFrame 来运行一些机器学习实验。我试图通过使用 randomSplit() 函数将它分成训练集和测试集,但它给了我一些我无法弄清楚原因的异常。我的代码与此类似: F
我是一名优秀的程序员,十分优秀!