【问题标题】:Why categorical_accuracy is low when training a MLP?为什么训练 MLP 时 categorical_accuracy 很低?
【发布时间】:2018-04-11 15:34:53
【问题描述】:

我正在 keras 中训练 3 层 MLP。数据集严重不平衡,希望提高模型的可检测率。

每当我将目标/自变量编码为数字(即从字符串映射到数字)时,categorical_category 得分接近 0.37。使用 category_optimizer。

当我将目标/自变量更改为分类(即一个热编码)时,报告的分数飙升至 0.90。

但是,少数类别(也是最重要的类别)之一没有被正确分类或根本没有分类。

我正在研究召回分数而不是精度。

采用的其他技术:类权重和对少数类进行上采样。

我发现没有单一编码的目标变量更容易工作。

共5类(1类代表多数,其他4类代表异常,少数)

【问题讨论】:

标签: python-3.x machine-learning keras artificial-intelligence data-science


【解决方案1】:

需要在所有分类问题中使用 one-hot 编码,否则您将暗示您的类中根本不存在的数字结构和顺序(即 数字 2 比 4 更接近 1,但对于 class 2 到 1 和 4 的情况并非如此)。您仍然可以重新采样您的数据或使用每类加权来提高召回率和准确率。

【讨论】:

  • 感谢康斯坦丁诺斯。 Right 将用于 onehotencoding,因为它给目标变量一个顺序是有意义的。不这样做的原因之一是我还没有找到如何使用这种配置生成混淆矩阵。您可以使用哪些指标? f1score、召回率和精度是否有意义。
  • 您只需在正确的轴上调用np.argmax() 即可将您的单热预测转换为数值类值。您可以轻松使用任何指标;你选择哪一个取决于你把重点放在哪里,预测方面。另外,如果您认为答案可以接受,请务必标记。
  • 确实,我已经设法使用 np.argmax() 来相应地转换预测。我现在的问题是使用分数来使用 GridSearchCV 对我的模型进行评分。
  • 确实感谢,我已经设法使用 np.argmax() 相应地转换预测。由于类不平衡问题,我现在的问题是使用分数来使用 GridSearchCV 对我的模型进行评分。错误消息显示:“分类指标无法处理多标签指标和多类目标的混合”。正在指定加权参数。 y 是 OneHotEncoded。
  • grid = GridSearchCV(estimator=classifier, param_grid=param_grid, n_jobs=no_cpu_jobs,scoring=f1_scorer, cv=cv_splits)recall_scorer = make_scorer(score_func=metrics.recall_score,greater_is_better=True,average='weighted ') f1_scorer = make_scorer(score_func=f1_score,greater_is_better=True,average='weighted')
猜你喜欢
  • 2020-08-08
  • 2016-10-01
  • 2016-03-04
  • 2016-12-07
  • 2021-11-17
  • 2016-03-26
  • 2017-08-24
  • 2020-12-11
  • 2013-10-01
相关资源
最近更新 更多