R语言学习_决策树

分类算法家族
决策树
ID.3、C4.5、C5.0
CART(Classification and Regression Tree, 分类回归树)
元模型
Bagging、Boosting、随机森林
贝叶斯
朴素贝叶斯、贝叶斯网络
懒惰算法
knn

决策树的庐山面目
    根节点
        一棵决策树只有一个根节点
    叶节点
    中间节点
    二叉树和多叉树
        二叉树:每个节点最多有两个分支
        多叉树:每个节点不止有两个分支
    体现了对样本数据不断分组过程

构建策略————有监督学习
    有监督学习和无监督学习的区别
        分类和聚类

    样本分成两部分
        训练数据集:用于建模
        测试数据集:用于验证

决策树的构建
    树的生长
        采用分而治之的策略
        选变量的顺序:如何从众多决策变量中选择一个当前最佳的决策变量;
        最佳分离点在哪:如何从分组比变量的众多取值中找到一个最佳的分割点;

    树的修剪
        避免过度拟合:过于个性化、失去了一般化

算法分类
ID3
信息增益
没有修剪
C4.5
信息增益率
悲观剪枝法
C5.0
信息增益率
自适应增强
CART(分类回归树)
基尼指数
“代价复杂度”剪枝法

分裂指标
ID3

分裂后的总熵
信息增益
C4.5
分裂信息
信息增益率
CART
基尼系数

准确性评价
评价模型的方式要考虑模型在所有分类中识别出某个分类的能力。对感兴趣的分类称为阳性(Positive)其它的类别称为阴性(negative)
混淆矩阵

指标
    正确率、错误率

    灵敏度(召回率、覆盖率)

    特异性

ROC曲线和AUC
横轴:1-特异性
纵轴:灵敏度

对角线:完全瞎猜

AUC
    曲线和对角线之间的面积
    0.5-1之间

模型准确性的评估方式
简单验证
数据–>训练集–>导出分类法–>评估准确性
–>测试集–>
交叉验证
K折验证

Sys.getenv(‘JAVA_HOME’)
Sys.setenv(JAVA_HOME=‘d:/’)

library(rJava)
library(RWeka)

m=J48(Species~.,data=iris)
m
plot(m)

m2=J48(Species~.,data=iris,control=Weka_control(U=T))
m2
plot(m2)

#验证
cdata=read.csv(‘e:/credit.csv’,stringsAsFactors = T)
str(cdata)

set.seed(12345)
cdata_rand=cdata[order(runif(1000)),]

credit_train=cdata_rand[1:900,]
credit_test=cdata_rand[901:1000,]

cm=J48(default~.,data=credit_train,control=Weka_control(M=10,U=F))
cm
plot(cm)

credit_pred=predict(cm,credit_test)
credit_pred

credit_pred_prob=predict(cm,credit_test,type=‘prob’)
credit_pred_prob
library(gmodels)
CrossTable(credit_test$default,credit_pred,prop.chisq = F,prop.c=F,prop.r = F,dnn=c(‘实际’,‘预测’))

credit_pred_prob

#roc
library(pROC)
roc1=roc(cdata_test$default,credit_pred_prob[,1] ,plot=T, print.thres=T,print.auc=T)

plot(roc1,col=‘blue’,print.thres=T,print.auc=T)
plot(roc2,col=‘red’,add=T,auc.polygon=F,print.thres=T,print.auc=T)

plot.roc(roc1, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
grid.col=c(“green”, “red”), max.auc.polygon=TRUE,
auc.polygon.col=“white”, print.thres=TRUE)
lines.roc(roc2,col=‘red’,print.auc=T,auc.polygon=TRUE, print.thres=TRUE)

roc.test(roc1,roc2)

#rpart CART算法

library(rpart.plot)
library(rpart)
head(iris,2)

ir.tr=rpart(Species~.,iris)
#直接从结果中看规则
ir.tr

par(mfrow=c(2,2))
rpart.plot(ir.tr,type=2,branch=1,extra=1)
rpart.plot(ir.tr,type=2,branch=1,extra=2)
rpart.plot(ir.tr,type=1,branch=1,extra=1)
rpart.plot(ir.tr,type=4,branch=1,extra=1)
par(mfrow=c(1,1))

#用fancyRpartPlot画树更好看
library(rattle)
fancyRpartPlot(ir.tr)
#输出成规则,用rattle程序包里面的asRules函数:tree和rpart两个包不能混用
asRules(ir.tr)

#可以用maptree来画
library(maptree)
draw.tree(ir.tr,nodeinfo=T)

你可能感兴趣的:(R语言学习)