使用 t 检验比较算法的性能

机器算法验证 机器学习 图像处理 计算机视觉
2022-04-02 02:05:18

我需要一点指导。我必须使用简单或配对 t 检验来比较多种算法的分类性能。

假设我有四个数据集(A、B、C),其中包含训练和测试样本。我正在运行 3 种算法(SIFT、SURF、ORB)并计算分类精度,例如 0.9 意味着 90% 的图像与测试数据集正确匹配。

假设我得到下表:

数据集(A、B、C、D)

  • 筛选 (0.90, 0.84, 0.90,0.45)
  • 冲浪(0.84、0.67、0.45、0.34)
  • ORB (0.34,0.45,0.45,0.23)

您能否指导我如何使用一些统计分析(例如简单的 t 检验)来比较这些算法的性能?

任何指导将不胜感激。谢谢。

3个回答

t 检验用于比较 2 组(或一组与理论值)。对于 3 个组(测试),您将需要 ANOVA,并且由于不同的数据集存在阻塞(配对的泛化),您将使用随机块 ANOVA 或混合效应模型。

但是,这些方法取决于近似正态性,并且根据数据的性质,它不太可能是近似正态的,并且您的样本量不足以调用 CLT。考虑到您的数据,排列测试可能是您的最佳选择。

这是进行排列测试的一种可能方法的 R 代码:

SIFT <- c(0.90, 0.84, 0.90, 0.45)
SURF <- c(0.84, 0.67, 0.45, 0.34)
ORB <- c(0.34, 0.45, 0.45, 0.23)

tmpdat <- rbind( SIFT, SURF, ORB )

tmpfun <- function(m) diff( range( rowMeans(m) ) )

out <- c( tmpfun(tmpdat), 
    replicate( 9999, tmpfun( apply(tmpdat, 2, sample) ) ) )
hist(out)
abline(v=out[1])
mean( out >= out[1] )

我建议使用配对 t 检验,因为不应该直接比较不同数据集的准确度。您测试的每个数据集都应该在您的 t 测试中形成一对。

根据您的示例,您将在 R 中执行类似的操作来比较 SIFT 和 SURF:

SIFT <- c(0.90, 0.84, 0.90, 0.45)
SURF <- c(0.84, 0.67, 0.45, 0.34)
SIFT_v_SURF <- t.test(SIFT,SURF,paired=TRUE,alternative="greater")

注意:通过使用 t 检验,您假设正常,但情况可能并非如此。

通常你不会总结,因为特定算法的性能与特定数据集的特征有关。在文献中,您会看到诸如“算法 X 在 10 个数据集中的 5 个中获胜”之类的短语。

但是,如果数字是正确的,那么在您的情况下,有一个明显的赢家,那就是 SIFT:它在所有数据集中击败了所有其他算法。