我是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
任何帮助将不胜感激
谢谢!
答案 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))