我有非二进制(三类)目标变量的高度偏斜数据。我想使用R包C5.0
和可选caret
来训练C5.0决策树分类。如何设置适用于此类数据的指标。我想过用F1。我为caret
+ rpart
构建了自定义函数,但我不知道如何为C5.0做到这一点。也许这甚至不是必要的,因为C5.0可能已经能够处理偏斜的数据(老实说,我并不完全确定实现是如何工作的。)
此处我的代码为caret
rpart
:
harmonicF1 <- function(data, lev, model) {
#treats the vectors like classes
#data$obs and data$pred must be whole numbers
scores <- vector(mode = "numeric", length = length(lev))
names(scores) <- lev
for(i in lev){
tp=nrow(data[data$pred==i & data$obs==i,]);
fp=nrow(data[data$pred==i & data$obs!=i,]);
fn=nrow(data[data$pred!=i & data$obs==i,]);
f1=(2*tp)/(2*tp+fp+fn)
scores[i]=f1;
}
harmonicF1 = 1/mean(1/scores)
names(harmonicF1) <- "harmonicF1"
return(harmonicF1);
}
fitControl <- trainControl(summaryFunction = harmonicF1)
fitModel_rpart <- train(cut ~ ., diamonds, method = "rpart", trControl = fitControl, metric = "harmonicF1", maximize=TRUE)