前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

作者头像
拓端
发布2020-11-30 10:46:04
1K0
发布2020-11-30 10:46:04
举报
文章被收录于专栏:拓端tecdat

原文链接:http://tecdat.cn/?p=17950

在本文中,我们使用了逻辑回归、决策树和随机森林模型来对信用数据集进行分类预测并比较了它们的性能。数据集是

代码语言:javascript
复制
credit=read.csv("credit.csv", header = TRUE, sep = ",")
代码语言:javascript
复制
看起来所有变量都是数字变量,但实际上,大多数都是因子变量,
代码语言:javascript
复制

> str(credit)
'data.frame':  1000 obs. of  21 variables:
$ Creditability   : int  1 1 1 1 1 1 1 1 1 1 ...
$ Account.Balance : int  1 1 2 1 1 1 1 1 4 2 ...
$ Duration        : int  18 9 12 12 12 10 8  ...
$ Purpose         : int  2 0 9 0 0 0 0 0 3 3 ...
代码语言:javascript
复制
让我们将分类变量转换为因子变量,
代码语言:javascript
复制

> F=c(1,2,4,5,7,8,9,10,11,12,13,15,16,17,18,19,20)
> for(i in F) credit[,i]=as.factor(credit[,i])
代码语言:javascript
复制
现在让我们创建比例为1:2 的训练和测试数据集
代码语言:javascript
复制

> i_test=sample(1:nrow(credit),size=333)
> i_calibration=(1:nrow(credit))[-i_test]
代码语言:javascript
复制
我们可以拟合的第一个模型是对选定协变量的逻辑回归
代码语言:javascript
复制

> LogisticModel <- glm(Creditability ~ Account.Balance + Payment.Status.of.Previous.Credit + Purpose +
Length.of.current.employment +
Sex...Marital.Status, family=binomia
代码语言:javascript
复制
基于该模型,可以绘制ROC曲线并计算AUC(在新的验证数据集上)
代码语言:javascript
复制



> AUCLog1=performance(pred, measure = "auc")@y.values[[1]]
> cat("AUC: ",AUCLog1,"\n")
AUC:  0.7340997
代码语言:javascript
复制

一种替代方法是考虑所有解释变量的逻辑回归

代码语言:javascript
复制

glm(Creditability ~ .,
+  family=binomial,
+  data = credit[i_calibrat

我们可能在这里过拟合,可以在ROC曲线上观察到

代码语言:javascript
复制




> perf <- performance(pred, "tpr", "fpr
> AUCLog2=performance(pred, measure = "auc")@y.values[[1]]
> cat("AUC: ",AUCLog2,"\n")
AUC:  0.7609792

与以前的模型相比,此处略有改善,后者仅考虑了五个解释变量。

现在考虑回归树模型(在所有协变量上)

我们可以使用

代码语言:javascript
复制
> prp(ArbreModel,type=2,extra=1)

模型的ROC曲线为

代码语言:javascript
复制

(pred, "tpr", "fpr")
> plot(perf)


> cat("AUC: ",AUCArbre,"\n")
AUC:  0.7100323

不出所料,与逻辑回归相比,模型性能较低。一个自然的想法是使用随机森林优化。

代码语言:javascript
复制

> library(randomForest)
> RF <- randomForest(Creditability ~ .,
+ data = credit[i_calibration,])
> fitForet <- predict(RF,
> cat("AUC: ",AUCRF,"\n")
AUC:  0.7682367

在这里,该模型(略)优于逻辑回归。实际上,如果我们创建很多训练/验证样本并比较AUC,平均而言,随机森林的表现要比逻辑回归好,

代码语言:javascript
复制

> AUCfun=function(i){
+   set.seed(i)
+   i_test=sample(1:nrow(credit),size=333)
+   i_calibration=(1:nrow(credit))[-i_test]




+   summary(LogisticModel)
+   fitLog <- predict(LogisticModel,type="response",
+                     newdata=credit[i_test,])
+   library(ROCR)
+   pred = prediction( fitLog, credit$Creditability[i_test])
+   RF <- randomForest(Creditability ~ .,
+   data = credit[i_calibration,])
+   pred = prediction( fitForet, credit$Creditability[i_test])
+   return(c(AUCLog2,AUCRF))
+ }
> plot(t(A))

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 拓端数据部落 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原文链接:http://tecdat.cn/?p=17950
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档