如何最好地在多个标签上显示最佳模型?

数据挖掘 机器学习 评估 模型选择 绘图
2022-01-22 20:12:09

我训练了 4 个模型,我想在我测试它们的 45 个不同标签上显示它们的预测成功。

当我天真地试图将它们放在另一个之上时,我得到了一个非常混乱的情节。

这是超过 45 个标签的 4 个模型的条形图: 这 在此处输入图像描述 是超过 45 个标签的 4 个模型的行: 在此处输入图像描述 我想可能会分部分显示它们,这意味着创建 9 个图,每个图只显示 5 个标签。

我真正想要的可能是在每个标签中显示获胜模型,因此获胜模型的颜色会立即出现在您面前。

你建议怎么做?

3个回答

由于您对每个标签上模型的相对排名感兴趣,您可以使用它ArrayPlot来显示排名。

例如,四个模型在一组 45 个标签上的预测成功。

SeedRandom[126]
modelLabels = 0.75 + RandomFunction[WienerProcess[-0.01, .08], {0, 45, 1}, 4];
modelLabels = TimeSeriesWindow[modelLabels, {1, Automatic}];

ListLinePlot[modelLabels,
 PlotStyle -> ColorData[112],
 PlotLegends -> StringTemplate["ba``"] /@ Range[2, 5]]

数学图形

对于First标签

First@Transpose@modelLabels["ValueList"]
{0.648211, 0.743796, 0.68795, 0.720637}

我们可以看到Orderingfor rank 应该是模型 2、4、3,然后是 1。模型排序的检查确认。

modelLableRank = Reverse@*Ordering /@ Transpose@modelLabels["ValueList"];
First@modelLableRank
{2, 4, 3, 1}

这些等级现在可以用 可视化ArrayPlot

ArrayPlot[Transpose@modelLableRank,
 ColorRules -> Thread[Range@4 -> ColorData[112] /@ Range@4],
 FrameTicks -> All,
 FrameLabel -> {"Rank", "Label"},
 PlotLabel -> "Model Prediction Sucess",
 PlotLegends -> Placed[StringTemplate["ba``"] /@ Range[2, 5], Below]
 ]

数学图形

第一个标签排名符合预期,可以看到相对排名和排名模式。

希望这可以帮助。

您可以使用一些指数,例如(可能是加权的)平均值。

另一种方法是使用 3 维图,其中一个维度是任务。

为了比较模型,您需要为模型的质量定义一个指标。

您没有指定,但我假设您的模型是一个多类分类器:在 45 个标签中,对于每个示例,它需要选择正确的一个。

您可以计算每个标签与其他标签的模型的 F1 分数:它能够正确预测标签 0 与不预测标签 0 的频率?(这被称为“一对多”策略。)这将为每个模型提供 45 个 F1 分数:每个标签一个 F1 分数。您显示的图表明所有标签或多或少都同等重要,因此您可以平均每个模型的 F1 分数,这将为您提供每个模型质量的指示。如果标签的重要性不同,请根据重要性使用加权平均值。

请注意,您显示的图只是说每个模型预测标签 0 大约 28 次,但没有关于这多久正确的信息......