MLR,错误分类的示例相关成本,makeCostSensWeightedPairsWrapper

MLR, example dependent cost of misclassification, makeCostSensWeightedPairsWrapper

此问题已被查看 74 次并且仅收到一个回复​​(截至 8 月 14 日星期三中午 (PDT))。

我重写了问题以使其尽可能清楚,如果有任何帮助,我将不胜感激。

作为总结,我需要 一个小而完整的例子 数据集二进制响应 如何使用 MLR 的 makeCostSensWeightedPairsWrapper 在测试集上获得预测概率

在 MLR 教程中关于成本敏感的部分 classification https://mlr.mlr-org.com/articles/tutorial/cost_sensitive_classif.html "Example-dependent misclassification costs"上有一段,根据鸢尾花数据集给出了例子

在下面的代码片段中,我修改了 iris 数据集以便仅包含两个 classes,因为我只对二进制 classification 感兴趣。

library( mlr )
set.seed( 12347 )
n1 = 100; ntrain = 70
df = iris[ 1:n1, ]  # 100 points in df so as to have two classes only (setosa and versicolor)
df$Species = factor( df$Species )  # refactor the response

# partition df into a training set (70 points) and test set (30 points)
# 
ix = sample( 1:n1, ntrain, replace=FALSE )
xtest = df[ setdiff( 1:n1, ix ), ]  ## test set
ntest = nrow( xtest )
xtrain = df[ ix, ]   # this is the training set

# create cost matrix, same as in the MLR example
#
cost = matrix(runif(ntrain * 2, 0, 2000), ntrain) * (1 - diag(2))[xtrain$Species,] + runif(ntrain, 0, 10)
colnames(cost) = levels(xtrain$Species)
rownames(cost) = rownames(xtrain)

xtrain$Species = NULL   # this is done according to the MLR example

# cost-sensitive task
#
costsens.task = makeCostSensTask(id = "xtrain", data = xtrain, cost = cost )
costsens.task

##lrn = makeLearner("classif.multinom", trace = FALSE, predict.type="prob" )
lrn = makeLearner( "classif.gbm", predict.type="prob" )
lrn = makeCostSensWeightedPairsWrapper( lrn ); lrn

mod = train(lrn, costsens.task ); mod

pred = predict( mod, newdata = xtest, pred.type="prob" );

perf = performance( pred, measures = list(auc), task = costsens.task)

# I get the following error:
#   Error in FUN(X[[i]], ...) : 
#   You need to have a 'truth' column in your pred object for measure auc!

我最初的项目是进行二进制 class化,其中包含了依赖于示例的错误class化成本。

目标是对测试数据集进行预测,获得概率并显示性能(使用 ROCR,其​​中有 MLR 映射函数)。

注意:我试过的学习器是 'classif.multinom' 和(我猜)'classif.gbm' 这两个可能与加权对包装器兼容。

我的问题是:

问题 1:在代码片段的哪个位置以及如何指定我想要概率作为成本敏感 classifier 的输出?

Q2:可以使用哪个学习器来产生 class化概率?

Q3:如何避免上述错误,得到class的概率?

再次感谢任何帮助,如果有人能及时回答,我将更加感激。

好吧,几天后这个问题的浏览量将近一百次(我的大约有 20 次:) 只有一条评论没有答案。

根据我对一些可用的 MLR 文档的探索,基于示例的成本敏感方法 (makeCostSensWeightedPairsWrapper) 的输出似乎只是标签,没有预测概率。

换句话说,对成本敏感的任务没有可用的概率,只给出了新标签,这些标签又是根据基本分类器的概率计算的。

所以,这是我会接受的答案。

至于 MLR 错误,至少在这种情况下,获得明确的错误消息而不是伪造的错误消息或者只是在文档中注明这一点会很有帮助。