全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
8919 2
2019-01-30

决策树

决策树(Decision Tree)是一种基本的分类和回归方法。

1、  回归树:用于预测定量数据,响应预测值取它所属的叶节点内训练集的平均响应值;

2、  分类树:用于预测定性数据,给定观测值被预测为它所属的叶节点内训练集中最常见的类别(多数表决)。

构造过程:特征选择→决策树的生成→决策树的剪枝

回归树 RSS作为确定分割点的准则

分类树 分类错误率作为确定分割点的准则

1)        分类错误率:,其中代表第m个区域的训练集中第k类所占的比例。

在实践中存在另外两个指标:

2)        基尼系数:,衡量K个类别的总方差。不难发现,当某结点的观测值几乎来自同一类别,G的值越小。

3)        信息增益(互信息):,.

###公式和图片不会添加,感兴趣的朋友可以下载附件,有详细的分析过程。

rm(list=ls())

library(tree) #加载tree包以建立分类树和回归树

data("Carseats")

attach(Carseats)

High=ifelse(Sales<=8,"No","Yes")  #创建高销量变量

Carseats=data.frame(Carseats,High)

dim(Carseats)  #400 12


tree.carseats=tree(High~.-Sales,data=Carseats)

summary(tree.carseats)


###生成####

set.seed(2)

train=sample(1:nrow(Carseats),200) #200个训练集 200个测试集

Carseats.test=Carseats[-train,] #测试数据

High.test=High[-train]


tree.carseats=tree(High~.-Sales,Carseats,subset = train)

tree.carseats


par(mfrow=c(1,1))

plot(tree.carseats)

text(tree.carseats,pretty=0)


tree.pred=predict(tree.carseats,Carseats.test,type="class")

table(tree.pred,High.test)

(86+57)/200 #测试集预测的准确率为(86+57)/200=0.715


###剪枝####

set.seed(3)

cv.carseats=cv.tree(tree.carseats,FUN=prune.misclass)

names(cv.carseats)


par(mfrow=c(1,2))

plot(cv.carseats$size,cv.carseats$dev,type="b") #错误率对树规模size的函数

plot(cv.carseats$k,cv.carseats$dev,type="b")  #错误率对复杂度k的函数


par(mfrow=c(1,1))

prune.carseats=prune.misclass(tree.carseats,best=9)

plot(prune.carseats)

text(prune.carseats,pretty=0)


tree.pred=predict(prune.carseats,Carseats.test,type="class")

table(tree.pred,High.test)

(96+60)/200 #测试集预测的准确率为(96+60)/200=0.78


#####回归树####

library(MASS)

data("Boston")

set.seed(1)

train=sample(1:nrow(Boston),nrow(Boston)/2)

tree.boston=tree(medv~.,Boston,subset=train) #房价中位数

plot(tree.boston)

text(tree.boston,pretty=0)


cv.boston=cv.tree(tree.boston)

plot(cv.boston$size,cv.boston$dev,type="b")


prune.boston=prune.tree(tree.boston,best=5)

plot(prune.boston)

text(prune.boston,pretty=0)


yhat=predict(tree.boston,newdata = Boston[-train,])

boston.test=Boston[-train,"medv"]

plot(yhat,boston.test)

abline(0,1)

mean((yhat-boston.test)^2)  #25




附件列表

决策树.docx

大小:190.75 KB

只需: 2 个论坛币  马上下载

详细分析过程

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-1-30 21:46:53
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-1-31 08:20:59
谢谢分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群