评估模型性能的R表——观察到的与预测的等级
我涉及到一个10级变量的预测,我使用rpart进行分类。 形成表格的特定代码是 as.vector(t(表(预测(bb.rt,set[train],type=“class”),响应[train])) 但结果很糟糕: 观察班→ 预测类 ↓ 预测类按字母顺序排序,但观察到的类不按字母顺序排序。评估模型性能的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
我需要以相同的方式对它们进行排序,以便将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")