版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
title: “决策树”
author: “yan”
date: “2018年10月26日”
output: html_document
# 获取当前工作目录
getwd()
# 设置当前工作目录(改变)
setwd("D:/")
app=read.csv("app_tot.csv")
# dim数据维度
dim(app)
#变量属性(int整数,num数值)
str(app)
#加载包
library(dplyr)
dat=app%>%filter(max_platform=='TAOBAO'|max_platform=='TMALL')%>% select(revolving_type_apply,age,province,granted_amount_w,applied_amount_w,RF_Score,cms_final_limit_w,app_source,
gmv12_w,max_active_days,v4_ret_hun,v4_ret_new,ever3_od30)
#summary()函数提供了最小值、最大值、四分位数和数值型变量的均值
summary(dat)
# floor():向下取整;ceiling(): 向上取整;round(): 四舍五入取整;turnc(): 向0取整;signif(): 保留给定位数的精度。
# nrow(x):行的个数 ncol(x):列的个数
smp_size <- floor(0.6 * nrow(dat))
# seed随机数种子
set.seed(2)
# sample(x,size):从x中随机抽取size大小的样本
#seq_len(5)用于创建一个从1开始到n的序列
train_ind = sample(seq_len(nrow(dat)), size = smp_size)
train <- dat[train_ind, ]
#删除抽样行
test <- dat[-train_ind, ]
# dim数据维度
dim(train)
dim(test)
#rpart#
library(rpart)
fit<-(ever3_od30~.)
#cp复杂度参数,通常设定阈值来剪枝
#minsplit每个节点所含最小样本数
#rpart建立决策树
rtree<-rpart(fit,data=train,minsplit=10, cp=0.02,maxdepth=4)
#可以打印决策树的复杂性参数,观察树的误差等数据
printcp(rtree)
library(rpart.plot)
#画出树图
rpart.plot(rtree, type=2)
######################################################################################################################################
#利用预测集进行预测
pre_train<-predict(rtree)
#输出混淆矩阵
table(pre_train,train$ever3_od30)
pre_test<-predict(rtree, newdata = test)
table(pre_test, test$ever3_od30)
library(pROC)
## train
modelroc <- roc(train$ever3_od30,pre_train)
plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
grid.col=c("green", "red"), max.auc.polygon=TRUE,
auc.polygon.col="skyblue", print.thres=TRUE)
## test
modelroc <- roc(test$ever3_od30,pre_test)
plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
grid.col=c("green", "red"), max.auc.polygon=TRUE,
auc.polygon.col="skyblue", print.thres=TRUE)