R&r; s包中的损失矩阵r

时间:2018-04-04 08:37:04

标签: r rpart

尝试了解损失参数在R

中的rpart包中的工作原理

看一下这个例子:https://www.listendata.com/2015/04/ways-to-correct-class-imbalances.html 它告诉我应该输入成本矩阵,其中最小的错误分类成本是最不希望预测的单元格。

这对我来说很有意义,因为我们希望分类器预测错误分类便宜的类。但是,当我尝试运行一个带有极高成本矩阵的简单树时,我看到的结果与我期望的相反。

df是泰坦尼克数据集

library(rpart)
library(rpart.plot)

df <- df[, c("Survived", "Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked")]


loss_matr <- matrix(c(0, 1000000000000000000000, 1, 0), nrow = 2, byrow = TRUE)

print(loss_matr)

fit <- rpart(Survived ~ ., data = df, method = "class", parms = list(loss = loss_matr))
rpart.plot(fit, fallen.leaves = FALSE, type = 1)

pred <- predict(fit, type = "class")
confusionMatrix(pred, df$Survived)

看着混淆矩阵,我看到分类器根本没有预测到类1,实际上我预计0级不会被预测,即在我的二元类情况下,假阴性会是最不受欢迎的结果。

我是否误解了损失矩阵的概念?

编辑: 博客文章中矩阵的结构与我所拥有的相反,这就是为什么我有如上所述的顺序。这与我的结构类似: http://datamining.togaware.com/survivor/Loss_Matrix.html

&#34;一个例子是数字0,10,1,0的字符串,可能被解释为说实际的1,预测为0(即假阴性)是10倍以上不喜欢误报!&#34;

我怎么知道rpart分类器(或任何其他)以哪种顺序设置我的类?

THX

1 个答案:

答案 0 :(得分:1)

您网站上的博客文章说成本矩阵的布局是

TP   FP
FN   TN

但您的成本矩阵是:

loss_matr
     [,1]  [,2]
[1,]    0 1e+21
[2,]    1 0e+00

也就是说,您已经为假阳性分配了高成本, 不要假阴性。你需要

loss_matr <- matrix(c(0, 1000000000000000000000, 1, 0), nrow = 2)