机械学习与R语言---决策树算法的实现与优化(Decision tree algorithm)

本文介绍了使用R语言的C5.0算法构建决策树模型预测贷款违约风险的过程,探讨了数据清洗、模型建立、评估及优化。在优化过程中,通过调整trials参数降低错误率,并通过设置错误成本矩阵着重降低误判违约的情况。

本篇需要使用的数据集为credit.csv,下载好并保存于R目录。

1.理解决策树算法

简而言之,决策树是一个分类器(classifier)。 它利用树状结构,来对于特征以及潜在的结果之间的关系建立模型。如下图(来源网络):

在决定是见于不见的时候,决策树给出了一些节点(node)来作为判断依据,至于这些节点是如何被找到的,内在的算法是什么,这个很难在这里讲清楚(而且严格地讲,我们每个人都可以不依赖R中已有的function而自己去编写决策树函数(并不会很难,如果你的逻辑简单的话)),但是决策树算法合适停下来却很容易理解:

a. 没有剩余的特征来分辨案例之间的区别

b.决策树已经达到预先定义的大小限制

2.此次的目的

credit.csv file里包含着的是1000个关于贷款的案例,我们的目的是希望建立模型来预测影响违约风险的因素。 数据里面的变量很多,最关键的是最后一个default变量,Yes便是违约了,No便是没有违约。

正如很多在R中的函数一样,决策树函数在R中也不仅仅是一个表达式,这里介绍一个较为常见的包和function,C5.0算法。

这个算法的内在逻辑可以自行上网查阅(切记,没有任何一种算法是绝对好的,我们并不需要找出什么时候哪个算法更好,也没必要,只需要这个算法拟合度高便行)

install.packages( 'C50' )

library( C50 )  #安装c50包

读取我们已经下载好的csv文件:

credit <- read.csv("credit.csv") 

往往我们需要设置stringAsFactors= F 来使字符型数据不被设为因子(factor),我们可以先设置,然后再更具自己的需要一个个调整,但是这里我并没有设置,因为我需要将他们设置为factor。

3.准备工作-data clean

如果你多次尝试过自己完完整整的处理一个项目(数据由别人提供),你会发现,data cleaning将会占用你整个项目8成以上的时间,你需要不断地去清洗数据以达到你需要的最终结果,甚至很多时候结果不好仅仅是因为数据的清洗不到位。

dim(credit)  
head(credit)
tail(credit)
str(credit)
summary(credit)
which(!complete.cases(credit))   

有一些步骤我们经常都要做,比如了解数据整体结构,看一看有没有缺失值,即使C5.0 的decision tree算法可以帮助我们处理缺失值,但是你仍然得去看看有没有缺失值,这有助于你了解数据的整体性。

> table(credit$default)  

 no yes 
700 300 

整体而言,违约的人数是30%,所以在之后我们随机分类training data 和testing data的时候, 这个大概的比例我们也应该记在心中,如果比例差距很大,建议再做一次随机分类。

进行数据分类:

set.seed(123)   #这一步是为了使你的结果和我的一样
train_sample <- sample(1000, 900)  

str(train_sample)

# split the data frames
credit_train <- credit[train_sample, ]  #训练组
credit_test  <- credit[-train_sample, ]  #测试组

prop.table(table(credit_train$default))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值