如何获得mlr3中的逻辑回归系数?

如何获得mlr3中的逻辑回归系数?,r,mlr3,R,Mlr3,我刚刚开始使用mlr3,对语法仍然非常不熟悉,我有两个问题: 如何从mlr3中经过训练的逻辑回归中获取系数 我正在处理一个非常不平衡的数据集,98%对2%,在这个数据集中有超过200万行,我尝试使用SMOTE方法,但它非常慢,因为它可以很快在python中完成,所以我的代码中有错误吗? 这是我的密码: 以下是我为你的问题收集的信息#1 创建一个大约有98%1和2%0的数据集 制定培训和测试任务 (1) 创造超平衡的采购订单 (2) 以这种方式创建学习者,原始代码中的方式将无法与po一起使用

我刚刚开始使用mlr3,对语法仍然非常不熟悉,我有两个问题:

  • 如何从mlr3中经过训练的逻辑回归中获取系数
  • 我正在处理一个非常不平衡的数据集,98%对2%,在这个数据集中有超过200万行,我尝试使用SMOTE方法,但它非常慢,因为它可以很快在python中完成,所以我的代码中有错误吗? 这是我的密码:

  • 以下是我为你的问题收集的信息#1

  • 创建一个大约有98%1和2%0的数据集

  • 制定培训和测试任务

  • (1) 创造超平衡的采购订单

    (2) 以这种方式创建学习者,原始代码中的方式将无法与po一起使用

  • 在火车上训练学员

  • 测试集上的测试

  • 库(mlr3)
    图书馆(dplyr)
    库(MLR3管道)
    种子(10)
    pcs=数据帧(a=runif(1000),b=runif(1000))
    pcs=pcs%>%
    变异(c=2*a+3*b,d=ifelse(c>0.6,1,0),导航器=因子(d))%>%
    选择(-c,-d)
    task=TaskClassif$new(“pcs”,backend=pcs,target=“navigator”,positive=“1”)
    序列集=样本(任务$nrow,0.8*任务$nrow)
    测试集=设置差异(序列长度(任务$nrow),序列集)
    任务列车%
    po(“学习者”,lrn(“classif.rpart”),
    预测(type=“prob”))
    )
    学员$train(任务训练)
    pred=学习者$predict(任务测试)
    
    输出:

    learner$model
    #' You can see the predicted probability by following the decision tree
    #' e.g. say you have a data point a and b
    #' first check that b>=.112 or b<.112 (nodes 2 and 3)
    #' etc.
    1) root 1085 304 1 (0.71981567 0.28018433)  
      2) b>=0.1122314 728  16 1 (0.97802198 0.02197802)  
        4) a>=0.007176245 709   0 1 (1.00000000 0.00000000) *
        5) a< 0.007176245 19   3 0 (0.15789474 0.84210526) *
      3) b< 0.1122314 357  69 0 (0.19327731 0.80672269)  
        6) a>=0.246552 65   0 1 (1.00000000 0.00000000) *
        7) a< 0.246552 292   4 0 (0.01369863 0.98630137) *
    
    #Test predictions
    pred$confusion
            truth
    response   1   0
           1 195   1
           0   0   4
    
    learner$model
    #“你可以通过遵循决策树看到预测的概率
    #例如,假设您有一个数据点a和b
    
    #'首先检查b>=.112或bI我猜您没有提供a,但由于您没有包含任何
    库调用,我不能确定。你想象过我们能够运行这个代码吗?您是否搜索了与“[r]系数mlr”的匹配项?如果你有一个更具理论性或战略性的建议,那么也许可以选择SE::Data Science。这里我们都是关于编写硬示例的,我不是这方面的专家,但是“classif.rpart”是CART(带有一棵树的随机林),而不是logistic回归。如果要使用逻辑回归,请指定“classif.log_reg”。如果要进行逻辑回归,请使用
    glm
    ,它将为您提供一个带有参数的模型。在这里,您可以在培训后通过执行
    learner$model
    查看模型。它将向您展示一系列决策。它是非参数的,没有公式/系数。@IRTFM感谢您的建议,我确实用这种方法搜索过,找到了
    getLearnerModel()
    ,但我不确定它是否可以在MLR3包中使用。很抱歉,我没有提供一个最简单的例子,因为SMOTE对于小数据集(例如10000*8)来说运行速度足够快,但是对于具有8个特性的一百万行来说,它运行得很慢。我使用
    imblearn
    包在python中尝试了相同的数据集,大约需要3秒钟。我只是想知道在r@Stacker中是否存在一些加速SMOTE方法的设置。谢谢您的帮助,我在那个地方犯了一个错误,但是学习者$model返回空值:(太棒了,谢谢你的帮助Stacker。但是我运行SMOTE方法已经超过30分钟了,它还没有完成,在Python上应该是非常快的,你知道为什么会发生这种情况吗?我可以为SMOTE设置什么使它更快吗?谢谢!我不知道,可能是因为你的数据集太大了吧?你可以尝试对你进行欠采样r少数类,因为200万中的2%仍然是40000行。请尝试安装包(“DMwR”);PC=SMOTE(navigator~,data,perc.over=10,perc.under=100);learner=mlr\u learner$get(“classif.rpart”)learner$predict\u type=“prob”;learner$train(task\u train)甚至perc.over=1仍然非常慢,但感谢您的帮助,谢谢!
    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"))
    
    library(mlr3)
    library(dplyr)
    library(mlr3pipelines)
    set.seed(10)
    
    pcs=data.frame(a=runif(1000), b=runif(1000))
    pcs = pcs %>%
      mutate(c=2*a+3*b, d=ifelse(c>.6, 1, 0), navigator=factor(d)) %>%
      select(-c, -d)
    
    task = TaskClassif$new("pcs",backend =pcs,target = "navigator",positive = "1" )
    train_set = sample(task$nrow, 0.8 * task$nrow)
    test_set = setdiff(seq_len(task$nrow), train_set)
    
    task_train <- task$clone()$filter(train_set)
    task_test  <- task$clone()$filter(test_set)
    
    po_over1= po("classbalancing")
    po_over1$param_set$values=list(ratio=16, reference="minor", adjust="minor", shuffle=FALSE)
    
    learner=GraphLearner$new(
      po_over1 %>>% 
        po("learner", lrn("classif.rpart", 
                          predict_type="prob"))
    )
    
    learner$train(task_train)
    
    pred=learner$predict(task_test)
    
    learner$model
    #' You can see the predicted probability by following the decision tree
    #' e.g. say you have a data point a and b
    #' first check that b>=.112 or b<.112 (nodes 2 and 3)
    #' etc.
    1) root 1085 304 1 (0.71981567 0.28018433)  
      2) b>=0.1122314 728  16 1 (0.97802198 0.02197802)  
        4) a>=0.007176245 709   0 1 (1.00000000 0.00000000) *
        5) a< 0.007176245 19   3 0 (0.15789474 0.84210526) *
      3) b< 0.1122314 357  69 0 (0.19327731 0.80672269)  
        6) a>=0.246552 65   0 1 (1.00000000 0.00000000) *
        7) a< 0.246552 292   4 0 (0.01369863 0.98630137) *
    
    #Test predictions
    pred$confusion
            truth
    response   1   0
           1 195   1
           0   0   4
    
    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"))
    
    learner=GraphLearner$new(
      gr_smote %>>% po("learner", lrn("classif.rpart", predict_type="prob"))
    )
    learner$train(task_train)
    learner$model
    1) root 1085 304 1 (0.7198157 0.2801843)  
      2) b>=0.5 391   0 1 (1.0000000 0.0000000) *
      3) b< 0.5 694 304 1 (0.5619597 0.4380403)  
        6) a>=0.5 203   0 1 (1.0000000 0.0000000) *
        7) a< 0.5 491 187 0 (0.3808554 0.6191446) *
    
    pred=learner$predict(task_test)
    pred$confusion
            truth
    response   1   0
           1 159   0
           0  36   5