MLR软件包R-更改GLM的公式

时间:2019-02-16 07:55:44

标签: r glm mlr

我是mlr包的新手。我正在尝试使用mlr软件包更改适合自己的glm公式。

我使用以下代码拟合我的逻辑回归。

#logistic regression
logistic.learner <- makeLearner("classif.logreg",predict.type =     "response")

#cross validation (cv) accuracy
cv.logistic <- crossval(learner = logistic.learner,
                    task = trainTask, iters = 3,stratify = TRUE,
                    measures = acc, show.info = F)

#cross validation accuracy
cv.logistic$aggr
cv.logistic$measures.test


#train model
fmodel <- train(logistic.learner,trainTask)
getLearnerModel(fmodel)

以下是我的输出。显然,并非所有功能都很重要,我只想通过调整glm公式来使用其中的一些功能。但是我不知道如何使用mlr-package更改该设置。

> summary(fmodel$learner.model)

    Call:
      stats::glm(formula = f, family = "binomial", data = getTaskData(.task, 
                                                                      .subset), weights = .weights, model = FALSE)

    Deviance Residuals: 
      Min       1Q   Median       3Q      Max  
    -2.3484  -0.3611   0.5153   0.7130   2.5401  

    Coefficients:
      Estimate Std. Error z value Pr(>|z|)    
    (Intercept)             -3.024e+00  1.137e+00  -2.660 0.007810 ** 
    GenderMale               2.469e-03  3.027e-01   0.008 0.993492    
    MarriedYes               5.911e-01  2.558e-01   2.311 0.020851 *  
    Dependents1             -4.398e-01  3.005e-01  -1.463 0.143402    
    Dependents2              3.120e-01  3.517e-01   0.887 0.374985    
    Dependents3             -8.299e-03  4.246e-01  -0.020 0.984407    
    EducationNot Graduate   -4.421e-01  2.663e-01  -1.660 0.096877 .  
    Self_EmployedYes        -3.111e-02  3.250e-01  -0.096 0.923736    
    ApplicantIncome          3.549e-05  4.886e-05   0.726 0.467542    
    CoapplicantIncome       -3.083e-05  6.131e-05  -0.503 0.615105    
    LoanAmount              -2.748e-03  2.756e-03  -0.997 0.318682    
    Loan_Amount_Term        -2.254e-03  2.281e-03  -0.988 0.322916    
    Credit_History1          4.066e+00  4.373e-01   9.296  < 2e-16 ***
    Property_AreaSemiurban   9.163e-01  2.725e-01   3.362 0.000774 ***
    Property_AreaUrban       2.191e-01  2.642e-01   0.829 0.406880    
    Gender.dummy1           -2.910e-01  7.389e-01  -0.394 0.693675    
    Dependents.dummy1        2.670e-01  8.188e-01   0.326 0.744307    
    Self_Employed.dummy1    -1.584e-01  4.418e-01  -0.358 0.719984    
    LoanAmount.dummy0        9.821e-01  5.160e-01   1.903 0.056996 .  
    Loan_Amount_Term.dummy1  9.370e-01  8.666e-01   1.081 0.279623    
    Credit_History.dummy1   -1.271e-01  3.675e-01  -0.346 0.729438    
    Income_by_loan          -2.112e-03  5.259e-03  -0.402 0.687931    
    Loan_amount_by_term     -1.978e-01  2.570e-01  -0.770 0.441523    
    ---
      Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    (Dispersion parameter for binomial family taken to be 1)

    Null deviance: 762.89  on 613  degrees of freedom
    Residual deviance: 551.83  on 591  degrees of freedom
    AIC: 597.83

    Number of Fisher Scoring iterations: 5

任何帮助将不胜感激

谢谢!

2 个答案:

答案 0 :(得分:2)

mlr不支持此功能-公式始终为target~.形式。就是说,这听起来并不像您真正想做的那样-为了弄清楚哪些功能和交互很重要,您需要将所有这些都传递给模型。

您当然可以将模型与特征选择方法(例如wrapping the learner in a feature selection)结合使用,以减少最终模型所需的特征数量。

答案 1 :(得分:1)

前几天,我正在解决这个确切的问题。

首先创建一个具有虚拟功能的新任务:

  traintask<-createDummyFeatures(traintask,method="reference")

这可确保您的变量名在末尾匹配。

接下来,您可以访问汇总系数并将其存储为矩阵:

   x<-as.matrix(summary(fmodel$learner.model)$coefficients[])

现在,用截距删除第一行:

   x<-x[-1,]

然后根据重要性对变量进行分类和子集化。第四列是您的p值:

   y<-x[,4]<0.05
   z<-y[y==TRUE]

最后,拉出重要变量的名称并将其作为任务的子集

   task2<-subsetTask(traintask,features=names(z))