【发布时间】:2021-03-14 20:25:39
【问题描述】:
刚开始使用mlr3,对语法还是很陌生,有两个问题:
- 如何从 mlr3 中经过训练的 Logistic 回归中访问系数?
- 我正在处理一个非常不平衡的数据集,98% vs 2%,并且这个数据集有超过 200 万行,我尝试使用 SMOTE 方法,但是速度很慢,因为它可以在 python 中很快完成,那么我的代码有什么错误吗? 这是我的代码:
task = TaskClassif$new("pcs",backend =pcs,target = "navigator",positive = "1" )
table(task$truth())
po_over = po("classbalancing",id="oversample",adjust="minor",reference="minor",shuffle=F,ratio=16)
table(po_over$train(list(task))$output$truth())
learner = mlr_learners$get("classif.rpart")
learner$predict_type = "prob"
learner = po_over %>>% learner
resampling = rsmp("holdout",ratio=0.8)
rr = resample(task,learner,resampling,store_models = T)
res <- rr$prediction()
auto1 <- autoplot(res)
auto2 <- autoplot(res,type='roc')
rr$score(msr("classif.acc"))$classif.acc %>% print()
对于 SMOTE:
gr_smote =
po("colapply", id = "int_to_num",
applicator = as.numeric, affect_columns = selector_type("integer")) %>>%
po("smote", dup_size = 15) %>>%
po("colapply", id = "num_to_int",
applicator = function(x) as.integer(round(x, 0L)), affect_columns = selector_type("numeric"))
【问题讨论】:
-
我猜您没有提供minimal reproducible example,但由于您没有包含任何
library电话,我无法确定。你有没有想过我们可以运行这段代码?您是否搜索了“[r] 系数 mlr”的匹配项?如果您需要更理论或战略性的建议形式,那么也许可以去 SE::Data Science。在这里,我们都是关于编写困难示例的代码。 -
我不是这方面的专家,但“classif.rpart”是 CART(单棵树的随机森林),而不是逻辑回归。如果要使用逻辑回归,请指定“classif.log_reg”。如果你想做逻辑回归,使用
glm,它会给你一个带参数的模型。在这里,您可以在训练后通过learner$model查看模型。它将向您展示一系列决定。它是非参数的——没有公式/系数。 -
@IRTFM 感谢您的建议,我确实是这样搜索的,并找到了
getLearnerModel(),但我不确定它是否可以在 MLR3 包中使用。抱歉,我没有提供一个最小的示例,因为 SMOTE 对于小型数据集(例如 10000*8)的运行速度足够快,但是对于具有 8 个特征的一百万行,它运行缓慢。我使用imblearn包在python中尝试了相同的数据集,大约需要3s。我只想知道是否存在一些设置来加速 r 中的 SMOTE 方法。 -
@Stacker,谢谢你的帮助,我在那个地方犯了一个错误,但是 learner$model 返回一个 null :(