如何提高火花神经网络模型的准确性?

时间:2016-07-19 12:33:56

标签: apache-spark machine-learning neural-network precision apache-spark-mllib

import org.apache.spark.ml.classification.MultilayerPerceptronClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.sql.Row

// Load training data
val data = MLUtils.loadLibSVMFile(sc,"/home/.../neural.txt").toDF()

val splits = data.randomSplit(Array(0.6, 0.4), seed = 1234L)
val train = splits(0)
val test = splits(1)

val layers = Array[Int](4, 5, 4, 4)
val trainer = new MultilayerPerceptronClassifier().setLayers(layers).setBlockSize(128).setSeed(1234L).setMaxIter(100)
val model = trainer.fit(train)
// compute precision on the test set
val result = model.transform(test)
val predictionAndLabels = result.select("prediction", "label")
val evaluator = new MulticlassClassificationEvaluator().setMetricName("precision")
println("Precision:" + evaluator.evaluate(predictionAndLabels))

我正在使用MultilayerPerceptronClassifier在Spark中构建神经网络。我得到了62.5%的准确率。我应该改变所有参数以获得良好的准确度?

1 个答案:

答案 0 :(得分:2)

正如有些人所说的那样,这个问题过于宽泛,没有更多细节就无法回答,但有些建议(与使用的模型/算法或实施它们的工具和库无关)将是:

  • 使用交叉验证集并使用不同的网络体系结构执行某些交叉验证。
  • Plot"学习曲线"
  • 确定您是否有高偏见或高差异
  • 查看您是否可以或需要应用特征缩放和/或规范化。
  • 做一些"错误分析"(手动验证哪些示例失败并对其进行评估或分类以查看是否可以找到模式)

不一定按此顺序,但这可以帮助您确定是否有欠装,过度拟合,如果您需要更多的训练数据,添加或删除功能,添加正则化等等。总之,执行机器学习调试。

希望有所帮助,您可以在Andrew Ngs系列视频中找到更多有关此内容的详细信息,从此开始: https://www.youtube.com/watch?v=qIfLZAa32H0