) h% s' A6 k% W, x; Y# A b' q. B) x# L2 W. ~2 M. m # w& g+ K% j1 o l图11|剪枝后预测结果的MSE与NMSE值。剪枝后模型的NMSE值仍然大于1,而且值反而增大了,因为原始模型就没有什么意义,剪枝对原本就没有意义的模型,达不到优化效果。: v1 C/ j" }5 b2 z
2 e8 b+ o7 D* t, N- w三、决策树分类模型 6 C F: K w* n1 U6 D$ f
4 L7 M! W8 [ j; w' X9 K分类决策树的因变量是定性变量,构建的模型也是用于对观测值进行分类预测。模型对变量进行递归二进制分裂来使树生长。分类误差(classification error rate)对树生长不够敏感,因此常用Gini index和cross-entropy两个指数对分类决策树模型准确率进行判断。 ) z" e: g* c, j. b! E" Q5 Z2 |- l5 @& }- V
- P8 b4 s0 A o( b7 q
/ @! U8 P5 M& b" g2 ~5 A
! F. n0 b# A- u
* m$ B0 B3 Z+ i4 z& X
Gini index是节点纯度(purity)的检测值,其值较小,表示节点包含的样本更多属于单个分类。" c& F, I. p5 O D) @) \
2 ?# N& m- ?- c( {4 w. N$ m6 s* s! M% ]$ M3 W" ` \; K$ f
# D0 \+ G. P, \7 W 4 R2 m2 t1 n1 M4 q' s( @$ U# T/ e
3.1 tree包用于构建分类决策树(Classification Trees) % G/ q5 i& c6 ?( H6 ` # P( {! A. E8 D+ s, f- p# ^利用微生物组数据,以grazing为因变量,其它变量为自变量,构建决策树。 , ~. J T9 K* J. o6 Q' I 5 B1 a% x5 Q) }4 Q# 3.1.1 分类决策树( a; k$ S s( T5 I3 U; [
tre = tree::tree(grazing~.,train.spe[,-1],# 用于构建决策树的变量可以是分类变量或者定量变量。 5 J+ d# {$ w) P na.action = na.omit, 4 U- B; b( q8 Z0 G2 F! U7 ` i! F split = "gini",# "deviance", "gini" * W- L- r% i( K/ S; @8 W3 K x=TRUE, , ?& m" o1 \4 f& K6 @ y=TRUE,2 l5 {* `, n+ x# q% [. U
#wts = TRUE # 设置了样本weights参数,则返回权重值。6 J) s/ i. g- j$ `) E% ~) K `0 ]
) , D/ }; |# \! G
tre 8 D3 g8 ~% i5 q" R3 U0 o## output8 a/ j* P5 t1 J) N2 W: F
write.table(tre$frame,"class_tre_res.txt",sep="\t",quote = FALSE,row.names = FALSE) 3 v ]5 X6 Y7 _* N& q% P' |. s9 ~4 V9 G- o! k- y8 C
# 3.1.2 描述统计1 Y- W8 Q* @: k6 F- H, }) f+ D
tre.res = summary(tre) # 输出用于中间节点拆分的变量,终端节点数目和error rate。 ! I0 c' |; e+ ?5 q w5 ktre.res) N; i5 u& f5 K0 i ^
tre.res$call # K& k! f; F, D. v3 ?& R2 qtre.res$type+ S' d) |) N6 q) k; i& c' Y, f
tre.res$used # 用于中间节点拆分的变量( {8 ?2 `7 i* x% G. M8 I: z
tre.res$size # 节点数目0 M% ~: ]- l: i _8 P
df = tre.res$df # 自由度=样本数-终端节点数目* B5 l$ y; x2 Z5 L& }; }/ T- f5 t K
df , K; Z6 |) h/ Y0 B" y( ~: j& Adev = tre.res$dev # 所有节点包含的分类偏差+ y$ a- Q: R: f& R1 x* a
dev$ @6 ^0 {' o+ P5 w. f1 I! J( @
tre.res$misclass # 错误分类样本与总样本数目 " [3 k, W: F7 b- B( _! ?( E$ \+ J( `+ P: g9 x
8 \4 ^( I* a) d2 T 4 L6 h% C- p' O- ]5 g& W% p ; j' ]1 [+ R) j0 w& Z6 k图12|分类树输出结果,class_tre_res.txt。var:用于拆分节点的变量及终端节点(<leaf>);n:每个节点的样本数量;dev:每个节点的偏差;yval:拟合结果,回归树为节点包含样本的因变量均值,分类树为该节点样本最多属于的分类水平;split: 节点拆分,2列分别是属于左侧或右侧的标签。yprob:回归树,此为NULL;分类树则为因变量各水平的拟合比率(即每个节点中属于各分类水平的样本的比例),此数据有5个处理,所以有5列。 5 c7 R$ l* b, G! ]( ^8 [8 P6 r4 s- _1 \
! C0 a$ ?7 \6 t& d! z& Z
; D" v3 h/ i6 O' i2 V2 @图13|分类树输出结果描述统计,tre.res。包含用于中间节点拆分的变量,终端节点数目和分类错误率等信息。; `9 p8 R; N8 c ] g5 v
+ M3 ?/ }: o# S4 |7 b# r7 c5 A
# 3.1.3 绘图查看决策树 ) s! m2 b0 @, Z1 ^ l! G mplot(tre)! I3 R! {( k2 ~! M0 B* F: L# n
text(tre,pretty = 0)* t0 f0 p( l6 ~
) }+ ^7 @( ?" n. V5 ]2 r' i# 3.1.4 预测测试数据集。 - ^: |# v% M6 Wlibrary(caret) : n" O, T* p/ Ttre.pred0 = predict(tre,test.spe[,-c(1,2)],type = "class") - e# Q) ?' K3 K
## 生成混淆矩阵, t, C' F P/ A# x& |
caret::confusionMatrix(tre.pred0,test.spe[,2]) # 分类准确率为40%。 8 x* q8 t% U, f8 ]! Q ; `1 r5 I! N/ G. ^( U# e * h3 `8 A( D# J" p9 b* Y- ?+ z" h; A
1 p! M, Q; S/ ]! j+ m- N1 {9 `
6 ?8 _, |' k0 U+ t初次构建的决策树分类错误率较高,40%。为了得到更好的分类结果,通过交叉验证进行剪枝调整决策树复杂度。9 T% f' R' q8 D1 O. A# X2 B
7 ^1 J0 }' v. N& Q0 g3.2 剪枝优化模型 8 Q3 k+ D& |" y% _1 d0 ^, m G% e/ l% b6 y/ A% G7 r
如果后续分析的目的是提高分类预测的准确性,则常使用分类错误率作为剪枝(pruning)的选择标准。6 N1 @/ P2 |, r: H0 a/ ?1 J
) Z! S2 z1 o* ~+ u3 I# h% l
# 3.2.1 cross-validation 优化模型: g* ~; P% A' S' y6 v: b* O
set.seed(12345)2 G. A- G" I+ Z" P
cv.tre = tree::cv.tree(tre,3 w9 I8 P1 m6 l- ]. `) U- R/ n2 D
FUN = prune.misclass, # prune.tree,prune.misclass可选。 ( {8 a. e h7 O C3 `9 b K=10 # K folds,可根据样本数目调整,50能被10整除。7 G) @* E6 g) S, t/ T, E1 h
) # K值设置不同,结果会有很大差异,可以多尝试几个K值。* o5 m$ a1 E: F5 V
names(cv.tre) # 输出结果, k" I4 E0 Y* l) k) l2 q/ u2 k# i
cv.tre$size # 每个树的终端节点数目 4 T8 f( F' b. U- k9 H9 vcv.tre$dev # cross-validation error rate+ P, u! f ^6 v) D
cv.tre$k # cost-complexity 参数值4 ?0 I: ~& M1 J
# \, o" x/ V9 N. A## 绘图选择最佳终端节点数 9 U- K% n! T( tpar(mfrow =c(1,2))( \2 c" ? Q# h# q2 _. G( U
plot(cv.tre$size,cv.tre$dev,type="b")- O$ U8 L, o9 K
plot(cv.tre$k,cv.tre$dev,type = "b") # 检测具有最低交叉错误率的终端节点的数量。 , j% Q/ S* i5 j) p& T' z) ~/ p% j" F4 l6 I9 a- S
x0 \ S' y4 l+ D3 W& W
9 K+ n: \7 q l# q' `( J2 g6 p: I6 G9 {& M0 G6 q( p) Z/ }
图14|交叉验证结果,reg.cv。size:每个树的终端节点数目;dev:cross-validation error rate;k:cost-complexity 参数值。; m8 t+ ~5 g0 l7 A
, m( B1 r7 R( \5 Q) F
8 x) Z; E d" S% W( g/ h
9 O8 i) Z6 _ y& o, h) O) z1 D
图15|交叉验证结果绘图。结果显示在终端节点数为3的时候误差率最低。当最低错误率,具有几个不同的终端节点数时,可以秉承简单模型的原则,选择最小的终端节点。也可以根据绘图结果,选择合适自己数据的终端节点数。当终端节点为1才有最低误差时,就选次一级的终端节点数。0 K0 F, ?' a( Y
: q ]/ V% e- e; {- f
# 3.2.2 使用prune.misclass()修剪决策树,设置终端节点为40 r0 A6 c' I' X' b/ Q
##通过递归地“剪裁”最不重要的拆分来确定所提供树的子树' T/ A9 d3 A5 Y1 O: B7 X: n: I
##"剪枝"结果必须是决策树的子树,所以有时输出的子树终端节点并不一定等于设置的best值。 7 [. f. \) V8 w0 }9 p) G' ]+ E, I4 {$ mprune.tre = prune.tree(tre,; y2 L; j" j* U# }
best = 3, , L3 R. a3 i7 R+ _4 Y% B method = "misclass") # deviance和misclass可选。 ) Q- L K2 R- }+ D. C4 msummary(prune.tre)( n0 ~8 V" \. v$ {. \
plot(prune.tre) 3 X8 ^" v* ^' b2 u; [text(prune.tre,pretty = 0) 4 t0 M) z. w+ z1 w6 p5 o 0 U8 j4 u7 t( r' l# 3.2.3 修剪树预测测试数据集--提高分类结果准确率(所有分类正确的样本/样本总数), u! U1 ~+ Q4 q; y' ?* d2 B; |
## 增加终端节点的数量,反而会降低分类准确率 . x9 m" ?6 |& w6 f1 X' C1 L1 p0 ~library(caret) , Y- p7 q7 {) Vtre.pred = predict(prune.tre,test.spe[-c(1,2)],type = "class") % l$ p) J# M' Xcaret::confusionMatrix(tre.pred,test.spe[,2]) # 分类准确率为36%,剪枝后准确率反而降低了。5 Y0 K# ^% Y( D" j4 G
! }- o5 f; @. V- I" d/ O* }4 o
# F+ o. ~2 g5 F( U, b9 T' `4 L t
. S* X& C( R( ~" e6 O
图16|剪枝后分类决策树,prune.tre。树生长总是从左侧开始。经过剪枝的分类树并不总是会提高分类正确率,有时还会降低分类正确率。比如此数据就是如此。分类争取率也比较低,说明数据不适合决策树模型。5 K) s+ i' [4 K# F6 ]% ~6 M/ m% n
4 U, Q0 c# Q" b6 m4 X d微信公众号后台回复“决策树-tree”或QQ群文件获取数据及代码。* O* z: f& u1 f& L* v3 P1 _: S
5 @) m6 P) j. T6 D1 C X) e机器学习-多元分类/回归决策树模型(tree包)$ \% k& c5 {. U) j
, K9 B0 l0 [& p! H1 d6 Y4 u
参考资料:4 Y6 N& [1 R2 M- C* T
* d- I+ \7 N7 c4 `9 e
James, Gareth, Daniela Witten, Trevor Hastie和Robert Tibshirani. An Introduction to Statistical Learning. 卷 103. Springer Texts in Statistics. New York, NY: Springer New York, 2013. https://doi.org/10.1007/978-1-4614-7138-7.: h* n$ o% G+ r( ?' g
- F8 [& E, d& E8 W* x/ n, k
《精通机器学习:基于R》第二版 2 t( _, a3 q& q8 S; U- H+ z+ l ^- E
统计学:从数据到结论 第4版,吴喜之编著,2013,中国统计出版社。 + L8 c: S& [- `2 b p% e/ D4 ]8 t% N* y0 T: [! W; N$ ?
推荐阅读 3 p% o) f1 G; e! [- { ( F8 E# O/ B( w/ [7 BR绘图-物种、环境因子相关性网络图(简单图、提取子图、修改图布局参数、物种-环境因子分别成环径向网络图) R* K4 U2 u1 t7 N! ^ 0 n5 b9 u4 N+ `) CR统计绘图-分子生态相关性网络分析(拓扑属性计算,ggraph绘图) 3 v. b# I# {: _+ K0 f; ~( v4 V5 [. c3 L- y7 z# p+ p/ m( L
R中进行单因素方差分析并绘图 1 _" d0 L7 T0 R0 Y, e8 ~, Z) z 0 M- Y% L, i6 \7 g* h5 gR统计绘图-多变量单因素非参数差异检验及添加显著性标记图 8 _# a4 `" o" g2 W/ |# L2 O% V6 G: I . E( v" H, G$ w+ m- s% ^' {' j+ IR统计绘图-单因素Kruskal-Wallis检验 3 ~5 l1 b1 S J& C! Y2 c + y) N, g# m2 m$ V4 c3 w+ bR统计绘图-单、双、三因素重复测量方差分析[Translation]: y+ A' W* V# J* Y2 |" E
' L: d+ x* C8 c9 I: l7 R, _' ]6 }2 pR统计-多变量单因素参数、非参数检验及多重比较7 g/ v- f$ X3 c3 I6 y8 l2 v: I. k/ m
3 t2 x: `4 p. C! |. i) w
R统计-多变量双因素参数、非参数检验及多重比较 8 }* M% u- J8 M7 } 8 K$ V9 U8 q/ M% k$ \/ JR绘图-KEGG功能注释组间差异分面条形图$ ]; r- ?3 ^+ l6 D8 [
0 w1 q J/ Q. I7 S. B* \6 N
R绘图-相关性分析及绘图 - v, U( U/ c2 J5 |0 r7 B6 `/ u8 D8 E5 H9 h- Y* A
R绘图-相关性系数图 - N) n+ n2 n5 C% [ 1 j. \- d' Q1 qR统计绘图-环境因子相关性热图 3 c! v" G, I2 G7 I9 b K( g" Q/ U
R绘图-RDA排序分析+ b# S) Q7 P6 C: N6 y; o
; O3 |( |; u+ c% s. J! y5 H( E
R统计-VPA分析(RDA/CCA)" U( A* T- G/ n( T+ p6 g, M
4 N$ I9 b' [! E( Y( wR统计绘图-RDA分析、Mantel检验及绘图 6 @' p. ^ C$ I; c; S# U. N6 p* W l6 e4 J
R统计-PCA/PCoA/db-RDA/NMDS/CA/CCA/DCA等排序分析教程 9 \5 `; m+ S8 P. y " Y* j6 @: p. `! N4 @- }R统计-正态性分布检验[Translation]( |5 \$ k# m5 P- f5 p0 L
* L, A( J4 n: T8 Z5 x M% R3 P
R统计-数据正态分布转换[Translation]. U& D! e' f3 o5 ]6 \) s2 D
7 s, q6 D: j$ r
R统计-方差齐性检验[Translation] / ?0 R" a. O; q1 l! O% B " A7 V: a* \2 [# |" q7 zR统计-Mauchly球形检验[Translation] 8 a9 L" W5 u. [5 l; V& f1 {! Q" S' b, _8 K; x0 @
R统计绘图-混合方差分析[Translation] - o) K5 A% ^6 R$ s6 b& }! |/ D0 _% s) i ) M Z0 K. H: O6 q# tR统计绘图-协方差分析[Translation], ~$ [ {6 u1 R- q! q* z5 Q! v7 P
- H( A- Y' M9 u+ aR统计绘图-RDA分析、Mantel检验及绘图/ K# Z/ }# K, G# { U- r
: L8 D/ l. `+ N3 @2 o
R统计绘图-factoextra包绘制及美化PCA结果图4 |8 B- d+ G! t# L" A
]/ J& I9 j' D aR统计绘图-环境因子相关性+mantel检验组合图(linkET包介绍1) : e0 y. j" h W8 X 5 | f& G4 i- w" S% S; tR统计绘图-随机森林分类分析及物种丰度差异检验组合图 ! [( ?+ r5 R! E) S& A0 W/ C/ a8 _- O: u. e4 E
机器学习-分类随机森林分析(randomForest模型构建、参数调优、特征变量筛选、模型评估和基础理论等) ( |3 u8 E4 n0 \# _/ H. b) C4 m———————————————— * ?2 |7 q( [5 W5 q, }版权声明:本文为CSDN博主「静默人声」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。! T- l! z1 x$ ]
原文链接:https://blog.csdn.net/qq_39859424/article/details/126801817 - m$ X+ a1 V" S# M 1 k; P8 H S9 b& o$ h 7 X; B* i2 |5 k1 j+ W