原文链接:http://tecdat.cn/?p=4281

原文出处:拓端数据部落公众号

如果我们对所有这些模型的结果进行平均,我们有时可以从它们的组合中找到比任何单个部分更好的模型。这就是集成模型的工作方式。

让我们构建一个由三个简单决策树组成的非常小的集合来说明:

这些树中的每一个都根据不同的变量做出分类决策。

随机森林模型比上面的决策树更深地生长树木,实际上默认是尽可能地将每棵树生长出来。随机森林以两种方式做到这一点。

第一个技巧是使用套袋。Bagging会对您的训练集中的行进行随机抽样。使用样本函数很容易在R中进行模拟。假设我们想在10行的训练集上进行装袋。

> sample(1:10, replace = TRUE)[1] 3 1 9 1 7 10 10 2 2 9

在此模拟中,如果再次运行此命令,则每次都会获得不同的行样本。平均而言,大约37%的行将被排除在自举样本之外。通过这些重复和省略的行,每个使用装袋生长的决策树将略有不同。

第二个随机来源超越了这个限制。随机森林不是查看整个可用变量池,而是仅采用它们的一部分,通常是可用数量的平方根。在我们的例子中,我们有10个变量,因此使用三个变量的子集是合理的。

通过这两个随机性来源,整体包含一系列完全独特的树木,这些树木的分类都不同。与我们的简单示例一样,每个树都被调用以对给定乘客进行分类,对投票进行统计(可能有数百或数千棵树)并且选择多数决策。

R的随机森林算法对我们的决策树没有一些限制。我们必须清理数据集中的缺失值。rpart它有一个很大的优点,它可以在遇到一个NA值时使用替代变量。在我们的数据集中,缺少很多年龄值。如果我们的任何决策树按年龄分割,那么树将搜索另一个以与年龄相似的方式分割的变量,并使用它们代替。随机森林无法做到这一点,因此我们需要找到一种手动替换这些值的方法。

看一下合并后的数据框的年龄变量:

> summary(combi$Age)Min. 1st Qu. Median Mean 3rd Qu. Max. NA's0.17 21.00 28.00 29.88 39.00 80.00 263

1309个中有263个值丢失了,这个数字高达20%!此子集是否缺少值。我们现在也想使用method="anova"决策树的版本,因为我们不是要再预测某个类别,而是连续变量。因此,让我们使用可用的年龄值在数据子集上生成一个树,然后替换缺少的那些样本:

> combi$Age[is.na(combi$Age)] <- predict(Agefit, combi[is.na(combi$Age),])

您可以继续检查摘要,所有这些NA值都消失了。

现在让我们看看整个数据集的摘要,看看是否还有其他我们以前没有注意到的问题变量:

> summary(combi)
> summary(combi$Embarked)C Q S2 270 123 914

两名乘客的空白。首先,我们需要找出他们是谁!我们可以which用于此:

> which(combi$Embarked == '')[1] 62 830

然后我们简单地替换这两个,并将其编码为一个因素:

> combi$Embarked <- factor(combi$Embarked)

另一个变量是Fare,让我们来看看:

> summary(combi$Fare)Min. 1st Qu. Median Mean 3rd Qu. Max. NA's0.000 7.896 14.450 33.300 31.280 512.300 1

它只有一个乘客NA,所以让我们找出它是哪一个并用中位数票价取而代之:

> which(is.na(combi$Fare))[1] 1044

好的。我们的数据框现已被清理。现在进入第二个限制:R中的随机森林只能消化多达32个等级的因子。我们的FamilyID变量几乎翻了一倍。我们可以在这里采用两条路径,或者将这些级别更改为它们的基础整数(使用unclass()函数)并让树将它们视为连续变量,或者手动减少级别数以使其保持在阈值之下。

我们采取第二种方法。然后我们将它转​​换回一个因素:

> combi$FamilyID2 <- combi$FamilyID> combi$FamilyID2 <- factor(combi$FamilyID2)

我们已经降到了22级,所以我们很好地将测试和训练集分开,安装并加载包

randomForest:> install.packages('randomForest')

设置随机种子。

> set.seed(415)

内部数字并不重要,您只需确保每次使用相同的种子编号,以便在随机森林函数内生成相同的随机数。

现在我们准备运行我们的模型了。语法类似于决策树。

> fit <- randomForest( )

我们强制模型通过暂时将目标变量更改为仅使用两个级别的因子来预测我们的分类,而不是method="class"像使用那样指定。

如果您正在使用更大的数据集,您可能希望减少树的数量,至少在初始探索时,使用限制每个树的复杂性nodesize以及减少采样的行数sampsize

那么让我们来看看哪些变量很重要:

> varImpPlot(fit)

我们的Title变量在这两个指标中都处于领先地位。我们应该非常高兴地看到剩下的工程变量也做得非常好。

预测函数与决策树的工作方式类似,我们可以完全相同的方式构建提交文件。

> Prediction <- predict(fit, test)> write.csv(submit, file = "firstforest.csv", row.names = FALSE)

让我们尝试一下条件推理树的森林。

所以继续安装并加载party包。

> install.packages('party')> library(party)

以与我们的随机森林类似的方式构建模型:

> set.seed(415)> fit <- cforest( )

条件推理树能够处理比Random Forests更多级别的因子。让我们做另一个预测:

> Prediction <- predict(fit, test, OOB=TRUE, type = "response")

有问题欢迎下方留言!


最受欢迎的见解

1.从决策树模型看员工为什么离职

2.R语言基于树的方法:决策树,随机森林

3.python中使用scikit-learn和pandas决策树

4.机器学习:在SAS中运行随机森林数据分析报告

5.R语言用随机森林和文本挖掘提高航空公司客户满意度

6.机器学习助推快时尚精准销售时间序列

7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)

9.python中用pytorch机器学习分类预测银行客户流失

拓端tecdat|R语言泰坦尼克号随机森林模型案例数据分析相关推荐

  1. R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray、F1、偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机)

    R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accuray.F1.偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机) ...

  2. R语言构建随机森林模型错误解决:Error in y - ymean : non-numeric argument to binary operator

    R语言构建随机森林模型错误解决:Error in y - ymean : non-numeric argument to binary operator 目录 R语言构建随机森林模型错误解决:Erro ...

  3. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  4. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  5. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  6. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  7. R语言基于随机森林进行特征选择(feature selection)

    R语言基于随机森林进行特征选择(feature selection) 目录 R语言基于随机森林进行特征选择(feature selection)

  8. csv数据,已区分训练集和验证集,需要用r语言建立随机森林回归模型,计算模型精度,包括训练集和验证集的r方、mae、rmse

    csv数据,已区分训练集和验证集,需要用r语言建立随机森林回归模型,计算模型精度,包括训练集和验证集的r方.mae.rmse #读取训练集 train <- read.csv("tra ...

  9. R语言条件Logistic回归模型案例:研究饮酒与胃癌的关系

    R语言条件Logistic回归模型案例:研究饮酒与胃癌的关系 目录 R语言条件Logistic回归模型案例:研究饮酒与胃癌的关系 #样例数据

  10. R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集

    R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集 目录 R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集 #数据加载

最新文章

  1. java读取json配置文件_解决:java 读取 resources 下面的 json 文件
  2. C中结构体的存储分配
  3. AI技术在游戏开发中的五种有效尝试
  4. 客户机操作系统已禁用 cpu。请关闭或重置虚拟机。_黑科技教学丨Win10竟然内置了一台虚拟机?教你如何玩转它...
  5. 011——数组(十一)array_merge array_merge_recursive array_change_key_case
  6. Asp.net core与golang web简单对比测试
  7. mysql 查询空字符串 设置默认值_MySQL默认值选型是空,还是 NULL-爱可生
  8. android官方架构组件,Android 架构组件官方文档01——LifeCycle
  9. iOS Coding Style Guide 代码规范
  10. Matlab之通用特殊矩阵函数
  11. cgi一键还原 linux分区,cgi plus一键备份恢复工具
  12. python脚本 游戏赚金币_一种王者荣耀刷金币方法(python脚本)
  13. java通过反射调用有参数的方法
  14. PostgreSQL NUMERIC 数据类型
  15. 2023凉陌ChatGPT付费创作系统V4.6+功能强大/有后台
  16. 简历解析步骤(第二步)技术与实现(5)识文字,做分类:身高、体重
  17. HTMLCSS登录界面及讲解
  18. python的coupon_Python数据分析:拼多多优惠券使用预测
  19. 苹果基带坏了怎么办_iPhone12 上市,苹果这次有哪些改变
  20. CryptoJS的hmac-sha1算法使用(转base64)——2022.11.18

热门文章

  1. Visio使用遇到的问题
  2. PXE无人值守安装linux后无法启动图形
  3. apache的配置文件httpd.conf
  4. C代码编译过程,cmakelist基础步骤
  5. 机器学习-决策树--基础知识总结
  6. Pytorch数据的读取与存储
  7. ubuntu批量创建文件夹
  8. 大数据流水线系统PiFlow v0.5
  9. mongodb 启动 WARNING: soft rlimits too low, transparent_hugepage/enabled is 'always'. never
  10. SQL正则表达式的妙用