【发布时间】:2018-10-31 22:36:32
【问题描述】:
我有一些数据想要了解“正常”行为。
使用一组有限的变量,我设法用简单的平均值来做到这一点。
df.groupBy([My_Variables])
.agg(
mean("value").alias("prediction"),
stddev("value").alias("sigma")
)
注意:“值”是一个双字段
我也使用随机森林算法做了同样的事情,它允许我使用更多变量。
val limit_training_set:Long = 1517439600
val trainingData = df.filter(col("datetime").cast("long")<limit_training_set)
val testData = df.filter(col("datetime").cast("long")>limit_training_set)
val assembler = new VectorAssembler()
.setInputCols(Array(
[My_Variables]
))
.setOutputCol("features")
... // (define Indexers and Imputers)
val rf = new RandomForestRegressor()
.setNumTrees(10)
.setMaxDepth(18)
.setLabelCol("value")
.setFeaturesCol("features")
val pipeline = new Pipeline()
.setStages(Array([Indexers and Imputers], assembler, rf))
val paramGrid = new ParamGridBuilder()
.addGrid(rf.numTrees, Array(5,10))
.addGrid(rf.maxDepth, Array(10,18))
.build()
// Set up cross-validation.
val re = new RegressionEvaluator()
.setMetricName("mae")
.setLabelCol("value")
val tv = new TrainValidationSplit()
.setEstimator(pipeline)
.setEvaluator(re)
.setEstimatorParamMaps(paramGrid)
// 80% of the data will be used for training and the remaining 20% for validation.
.setTrainRatio(0.8)
val model = tv.fit(trainingData)
这给了我很好的预测,但与平均方法相比,我丢失了我想要的标准差信息。
除了预测之外,还有没有办法使用随机森林计算类似 stddev 的值?或者是否有其他 ML 算法更适合这种情况?
【问题讨论】:
-
所以你需要计算一些字段的stdev,只要你对每一行的预测......对吗?
-
我希望有与 Mean 类似的行为。对于每组变量,我想要一个预测分数和一个“偏差”分数。
标签: scala apache-spark machine-learning apache-spark-mllib random-forest