【问题标题】:LDA cross validation evaluatorLDA 交叉验证评估器
【发布时间】:2017-10-23 03:49:40
【问题描述】:

我希望对 LDA 算法应用交叉验证以确定主题的数量 (K)。 我的疑问是关于评估者,因为我希望使用对数似然。创建交叉验证时,我在 .setEvaluator(????) 上设置了什么?

// Define a simple LDA
val lda = new LDA()
  .setMaxIter(10)
  .setFeaturesCol("features")

// We use a ParamGridBuilder to construct a grid of parameters to search over.
val range = 1 to 20
val paramGrid = new ParamGridBuilder()
    .addGrid(lda.k, range.toArray )
    .build()   

// Create a CrossValidator
val cv = new CrossValidator()
  .setEstimator(lda)
  .setEvaluator(????)
  .setEstimatorParamMaps(paramGrid)
  .setNumFolds(5)

【问题讨论】:

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


    【解决方案1】:

    当您有效地进行无监督学习时,应用交叉验证并不容易。除非您已标记训练数据,否则CrossValidator 提供的接口不太可能适用。您尝试不同的 k 值(LDA 生成的主题数量)这一事实表明您可能没有这种带标签的训练数据。

    如果您要尝试重新利用 CrossValidator,我认为没有合适的 Evaluators 可用(至少从 Spark-2.2 开始)。如果您正在探索模型的不同维度(例如改变主题的数量,k),那么数据的对数似然在具有不同维度的模型之间进行比较并非易事。例如,当您增加类的数量时,您预计数据的可能性会增加,但存在过度拟合的风险。一种标准方法是使用 Akaike Information criterion 之类的东西来惩罚具有更高复杂性(例如更大 k)的模型。同样,我认为 CrossValidator 目前不支持这一点。

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 2018-12-17
      • 2017-01-02
      • 1970-01-01
      • 2019-04-20
      • 2021-06-13
      • 2020-08-04
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多