美文网首页R语言做生信
R语言机器学习与临床预测模型35--分类回归树

R语言机器学习与临床预测模型35--分类回归树

作者: 科研私家菜 | 来源:发表于2022-03-28 21:45 被阅读0次

    本内容为【科研私家菜】R语言机器学习与临床预测模型系列课程

    R小盐准备介绍R语言机器学习与预测模型的学习笔记

    你想要的R语言学习资料都在这里, 快来收藏关注【科研私家菜】


    [图片上传失败...(image-fd5bf4-1648433074208)]

    01 什么是分类回归树CART?

    分类回归树(Classification and Regression Tree, CART)是一种经典的决策树,可以用来处理涉及连续数据的分类或者回归任务。分类回归树 既可以用于创建分类树 (classification tree),也可以用于创建回归树 (regression Tree)
    回归树:用平方残差 (square of residual) 最小化准则来选择特征,叶子上是实数值
    分类树:用基尼指数 (Gini index) 最小化准则来选择特征。叶子上是类别值

    分类树与回归树的区别在样本的输出,如果样本输出是离散值,这是分类树;样本输出是连续值,这是回归树。分类树的输出是样本的类别,回归树的输出是一个实数。

    分类模型:采用基尼系数的大小度量特征各个划分点的优劣。

    回归模型:采用误差平方和度量。
    CART算法步骤:

    1. 特征选择;
    2. 递归建立决策树;
    3. 决策树剪枝;

    02 CART分类树算法

    CART分类树算法使用基尼系数选择特征,基尼系数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(率)相反。
    基尼系数
    数据集D的纯度可用基尼值来度量

    [图片上传失败...(image-199e9f-1648433074208)]
    [图片上传失败...(image-47dc2d-1648433074208)]
    [图片上传失败...(image-d9ac21-1648433074208)]

    建立CART分类树步骤

    [图片上传失败...(image-9dac9e-1648433074208)]


    03 CART回归树算法

    建立CART回归树步骤

    [图片上传失败...(image-7a5d24-1648433074208)]

    04 CART的R语言实现

    ####加载程序包
    library(rpart) #classification and regression trees
    library(partykit) #treeplots
    library(MASS) #breast and pima indian data
    library(ElemStatLearn) #prostate data
    library(randomForest) #random forests
    library(xgboost) #gradient boosting 
    library(caret) #tune hyper-parameters
    
    ###########CART first
    data(prostate)
    prostate$gleason <- ifelse(prostate$gleason == 6, 0, 1)
    pros.train <- subset(prostate, train == TRUE)[, 1:9]
    pros.test = subset(prostate, train == FALSE)[, 1:9]
    
    set.seed(123)
    tree.pros <- rpart(lpsa ~ ., data = pros.train)
    tree.pros$cptable
    plotcp(tree.pros)
    cp <- min(tree.pros$cptable[5, ])
    prune.tree.pros <- prune(tree.pros, cp = cp)
    plot(as.party(tree.pros))
    plot(as.party(prune.tree.pros))
    party.pros.test <- predict(prune.tree.pros, 
                               newdata = pros.test)
    rpart.resid <- party.pros.test - pros.test$lpsa #calculate residual
    mean(rpart.resid^2)
    
    ########CART breast cancer
    data(biopsy)
    biopsy <- biopsy[, -1]
    names(biopsy) <- c("thick", "u.size", "u.shape", "adhsn", "s.size", "nucl", "chrom", "n.nuc", "mit", "class")
    biopsy.v2 <- na.omit(biopsy)
    set.seed(123) #random number generator
    ind <- sample(2, nrow(biopsy.v2), replace = TRUE, prob = c(0.7, 0.3))
    biop.train <- biopsy.v2[ind == 1, ] #the training data set
    biop.test <- biopsy.v2[ind == 2, ] #the test data set
    str(biop.test)
    
    set.seed(123)
    tree.biop <- rpart(class ~ ., data = biop.train)
    tree.biop$cptable
    cp <- min(tree.biop$cptable[3, ])
    prune.tree.biop = prune(tree.biop, cp <- cp)
    # plot(as.party(tree.biop))
    plot(as.party(prune.tree.biop))
    rparty.test <- predict(prune.tree.biop, newdata = biop.test,
                           type = "class")
    table(rparty.test, biop.test$class)
    (136+64)/209
    
    

    [图片上传失败...(image-c9582e-1648433074208)]
    [图片上传失败...(image-f5586c-1648433074208)]
    [图片上传失败...(image-7e7f72-1648433074208)]
    [图片上传失败...(image-557545-1648433074208)]

    05 总结

    数据集中会包含一些复杂的相互关系,使输入数据和目标变量之间存在非线性的关系。对于这种复杂关系的建模,一种可行的方式是使用树来对预测值分段,包括分段常数(回归树)和分段直线(模型树)。

    CART算法可以用于构建二元树并处理离散型或连续型数据的切分。若使用不同的误差准则,就可以通过CART算法构建模型树和回归树。但是,该算法构建的树倾向于对数据过拟合,可采用剪枝的方法解决该问题。剪枝分为预剪枝(在树的构建过程中就就进行剪枝)和后剪枝(树构建完毕进行剪枝)。预剪枝更有效但需要用户定义一些参数。一般地,为了寻找最佳模型可以同时使用两种剪枝技术。

    CART可以被看做决策树的升级版本,用于处理连续数据。

    决策树的思想虽然比较粗暴,但是可解释很强、计算效率也比较高,应用非常广泛。如果配合剪枝、集成等策略,我们可以基于C4.5、CART这类模型构建出很多非常优秀的模型,比如随机森林、随机梯度上升树等等。

    在构建决策树的过程中,我们评估了每一种特征,在对样本进行分组时的能力大小——这个分数可以作为特征工程中,特征选择的依据。因此,有时候我们也会使用决策树来做特征选择。

    参考资料:

    https://zhuanlan.zhihu.com/p/139523931
    https://zhuanlan.zhihu.com/p/139519852


    关注R小盐,关注科研私家菜(VX_GZH: SciPrivate),有问题请联系R小盐。让我们一起来学习 R语言机器学习与临床预测模型

    相关文章

      网友评论

        本文标题:R语言机器学习与临床预测模型35--分类回归树

        本文链接:https://www.haomeiwen.com/subject/rclbdrtx.html