尝试了解损失参数在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
答案 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)