评估模型性能的R表——观察到的与预测的等级

评估模型性能的R表——观察到的与预测的等级,r,machine-learning,diagnostics,R,Machine Learning,Diagnostics,我涉及到一个10级变量的预测,我使用rpart进行分类。 形成表格的特定代码是 as.vector(t(表(预测(bb.rt,set[train],type=“class”),响应[train])) 但结果很糟糕: 观察班→ 预测类 ↓ 预测类按字母顺序排序,但观察到的类不按字母顺序排序。 我需要以相同的方式对它们进行排序,以便将diag(矩阵)上的值与其他值进行比较 您只需要使用标准的子集运算符重新排列列,首先创建一些示例数据: R> dd = data.frame(x=1:4, z=5

我涉及到一个10级变量的预测,我使用rpart进行分类。 形成表格的特定代码是

as.vector(t(表(预测(bb.rt,set[train],type=“class”),响应[train]))

但结果很糟糕: 观察班→

预测类 ↓

预测类按字母顺序排序,但观察到的类不按字母顺序排序。
我需要以相同的方式对它们进行排序,以便将diag(矩阵)上的值与其他值进行比较

您只需要使用标准的子集运算符重新排列列,首先创建一些示例数据:

R> dd = data.frame(x=1:4, z=5:8, y=10:13)
R> rownames(dd) = 4:1  
R> dd
  x z  y
4 1 5 10
3 2 6 11
2 3 7 12
1 4 8 13
接下来,我指定行和列的顺序:

R> dd[sort(rownames(dd)), sort(colnames(dd))]
  x  y z
1 4 13 8
2 3 12 7
3 2 11 6
4 1 10 5

如果我正确理解了您的问题,您似乎只需要一个混乱矩阵。

当然,手动计算并不困难,但在各种R包中有(至少)十几个内置函数为您处理所有这些——数据处理、表格式设置、错误检查等。我下面使用的bulit in函数也计算分类错误

mda包有一个内置函数,称为混淆。你这样使用:

> library(mda)
> data(iris)
> iris_fit = fda(Species ~., data=iris)

> CM = confusion(predict(iris_fit, iris), iris$Species)
> # observed classification (true) is column-wise;
> # predicted is row-wise 
> CM

            true
   predicted    setosa versicolor virginica
   setosa         50          0         0
   versicolor      0         48         1
   virginica       0          2        49

   attr(,"error")
   [1] 0.02
同样,在CRAN上的第三方软件包中还有许多函数用于计算混淆矩阵

使用sos快速搜索R包空间,得出以下结果:

> library(sos)

> findFn("confusion", maxPages=5, sortby="MaxScore")
我故意将这个搜索限制在结果的前5页(返回了87个单独的函数)。根据这些结果,具有混淆矩阵功能的其他R包:

  • 包装fpc中的zmisclassification.matrix

  • pamr包中的panr混淆

  • 包装DAAG中的混淆

> library(sos)

> findFn("confusion", maxPages=5, sortby="MaxScore")