【问题标题】:How to get classification probabilities from MultilayerPerceptronClassifier?如何从 MultilayerPerceptronClassifier 获得分类概率?
【发布时间】:2016-06-28 00:57:43
【问题描述】:

这似乎与以下最相关:How to get the probability per instance in classifications models in spark.mllib

我正在使用 spark ml 进行分类任务,构建 MultilayerPerceptronClassifier。一旦我建立了一个模型,我可以得到一个给定输入向量的预测类,但我不能得到每个输出类的概率。上面的清单表明 NaiveBayesModel 从 Spark 1.5.0 (using a predictProbabilities method) 开始支持此功能。我想了解 MLPC 的这个功能。有没有办法破解它来获得我的概率?会在 1.6.2 中包含吗?

【问题讨论】:

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


【解决方案1】:

我认为简短的答案是否定的。

MultilayerPerceptronClassifier 不是概率的。在训练后设置权重(和任何偏差)时,给定输入的分类将始终相同。

我认为,您真正要问的是“如果我要通过给定幅度的某些随机干扰来调整权重,那么分类与没有调整的情况有多大可能相同?”

您可以通过重新训练感知器(使用不同的、随机选择的起始条件)来进行 ad hoc 概率计算,并了解各种分类的概率。

但我不认为这真的是 MLPC 预期行为的一部分。

【讨论】:

  • 不是我想要表达的意思,但也许我对“概率”一词的选择是不正确的。也许我想要的是更像“自信”的东西。分类器对于每个输出类都有n 输出节点。来自前一层节点的权重将在输出节点中加起来为某个值。具有最高值的输出节点是预测的输出类。通过直接访问这些值,我可以分辨出具有很高置信度的选定类与两个可能的类之间非常接近的类之间的差异。
【解决方案2】:

如果您查看 this line in the MLPC source code,您会发现 MLPC 正在通过底层 TopologyModel 工作,该 TopologyModel 提供了我正在寻找的 .predict 方法。 MLPC 将生成的Vector 解码为单个标签。

我能够使用经过训练的 MLPC 模型使用其权重创建一个新的 TopologyModel

MultilayerPerceptronClassifier trainer = new MultilayerPerceptronClassifier()...;
MultilayerPerceptronClassificationModel model = trainer.fit(trainingData);
TopologyModel topoModel = FeedForwardTopology.multiLayerPerceptron(model.layers(), true).getInstance(model.weights());

【讨论】:

  • 这个问题看起来很简单。训练完分类器后,您期望得到一个模型,该模型应该为您提供进一步分类的所有支持
猜你喜欢
  • 2017-09-23
  • 2019-06-29
  • 2018-08-28
  • 2019-10-25
  • 2020-10-09
  • 1970-01-01
  • 2015-10-28
  • 2017-06-12
  • 2011-09-22
相关资源
最近更新 更多