【问题标题】:Spark-mllib retraining saved modelsSpark-mllib 重新训练保存的模型
【发布时间】:2017-05-17 13:48:15
【问题描述】:

我正在尝试使用 spark-mllib 进行分类,尤其是使用 RandomForestModel。

我已经从 spark (RandomForestClassificationExample.scala) 中查看了这个示例,但我需要一种稍微扩展的方法。

我需要能够训练模型、保存模型以供将来使用,还需要能够加载它并进一步训练。比如,扩展数据集并再次训练。

【问题讨论】:

    标签: scala apache-spark apache-spark-mllib


    【解决方案1】:

    我完全理解导出和导入模型以供将来使用的需要。

    不幸的是,使用 Spark 无法“进一步”训练,也没有任何意义。因此,建议重新训练模型,使用用于训练第一个模型 + 新数据的数据。

    如果您想添加更多数据(例如特征、截距、系数等),您的第一个训练值/指标就没有多大意义了

    我希望这能回答你的问题。

    【讨论】:

    • 补充一点,唯一可能有意义的是使用以前训练的模型参数作为使用新/扩展数据集训练模型的起点。但是,您还应该使用 clean slate 状态运行模型,以检查您是否没有过度拟合。因此,我同意 eliasah 的观点,即 再培训 意义不大。
    • 鉴于在线学习是一个很大的领域 - 为什么进一步的培训没有意义?在可能的情况下至少支持基本的 SGD 似乎并不合适......?
    • 确实,再训练没有意义,但是如果训练数据如此庞大(即使是许多火花集群也需要数天的时间来训练它),我们必须将其拆分成批次的训练数据怎么办。然后例如在第二批数据上重新训练已经拟合的模型。在这种情况下,重新训练拟合模型是否有意义,否则还有其他选择吗?
    • @EmnaJaoua Spark 专为海量数据而生。
    • 是的,这是真的,但我的数据大约是数十亿
    【解决方案2】:

    如果您想使用旧模型并使用新数据重新训练它,您可能需要寻找一些强化学习技术而不是随机森林。

    据我所知,deeplearning4j 在 Spark(和 Hadoop)之上实现了深度强化学习算法。

    【讨论】:

      【解决方案3】:

      如果你只需要保存JavaRDD[Object],你可以这样做(在Java中)

      model.saveAsObjectFile()
      

      值将使用 Java 序列化写入。然后,要读取您的数据:

      JavaRDD[Object] model = jsc.objectFile(pathOfYourModel)
      

      请注意,目标文件在 Python 中不可用。但是您可以使用 saveAsPickleFile() 编写模型并使用 pickleFile() 读取它。

      【讨论】:

        猜你喜欢
        • 2019-06-04
        • 2015-04-10
        • 2019-12-06
        • 2015-03-07
        • 1970-01-01
        • 2017-05-30
        • 1970-01-01
        • 2017-02-06
        • 2022-01-01
        相关资源
        最近更新 更多