首页 > 其他分享 >R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化

时间:2022-11-09 12:33:20浏览次数:54  
标签:训练 模型 ROC 调优 参数 随机 churn 我们 决策树

在本教程中,我们将学习覆盖决策树和随机森林。这些是可用于分类或回归的监督学习算法。

从决策树到随机森林:R语言信用卡违约分析信贷数据实例

,时长10:11

 

下面的代码将加载本教程所需的包和​​数据集​​。

  1.  library(tidyverse)
  2.   
  3.  # 电信客户流失率数据
  4.  churn <- read_rds(chuata.rds))

 

数据

花点时间探索下面的这个数据集。

此数据框中的一行代表一家电信公司的客户。每个客户都从该公司购买了电话和互联网服务。

此数据中的因变量变量 ​​canceled​​ 指示客户是否终止了他们的服务。

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_数据

决策树

为了演示拟合决策树,我们将使用 ​​churn​​数据集并使用所有可用的预测变量进行预测。

 

数据拆分

我们将数据分成训练集和测试集。训练数据将进一步分为 5 折进行超参数调优。


1.   # 记住一定要设置你的随机数种子。
2.
3. chuit <- iniplit(cdf)
4.
5. chining <- chulit %>% trang()
6.
7. chuest <- chuplit %>% tesg()
8.
9. #在训练数据集上创建交叉验证的
10. ##这些将被用于调整模型的超参数
11.
12. chds <- vfcv(chung, v = 5)

 

特征工程

我们将在我们的训练数据上训练以下转换。

  • 消除数值预测变量的偏度
  • 标准化所有数字预测变量
  • 为所有名义预测变量创建虚拟变量


1.  chu_rep <- recipe(cace_srce ~ ., data = chutann) %>% 
2. stepYeonon(al_nmeric(), -al_utcoms()) %>%
3. ste_nomaze(all_umic(), -al_oucoes()) %>%
4. ste_dumy(all_inal(), -al_otcomes())

 

让我们检查一下特征工程步骤是否正确执行。

 

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_数据_02

模型规格

接下来,我们指定具有以下超参数的决策树分类器:

  • 成本复杂度参数(又名 Cp 或 λ)
  • 树的最大深度
  • 节点中进一步拆分所需的最小数据点数。

 

工作流程

接下来,我们将我们的模型组合到一个工作流中,以轻松管理模型构建过程。

treow <- workflow()

 

超参数调优

我们将对决策树超参数进行网格搜索,并在交叉验证期间根据 ROC 曲线下的面积选择性能最佳的模型。

请参见下面的示例,我们在其中创建 ​​tree_grid​​ 对象。


1.  ## 创建一个超参数值的网格来测试
2. tr_gid <- girular(cotolty(),
3. teedeth(),
4. mnn(),
5. lvs = 2)

 

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_随机森林_03

调整超参数 tune_grid()

为了从我们的调整网格中找到超参数的最佳组合,我们将使用该 ​​tune_grid()​​ 函数。

在我们的 KNN 示例中,此函数将模型对象或工作流作为第一个参数,将交叉验证折叠作为第二个参数,将调整网格数据框作为第三个参数。


1.  ## 调整决策树工作流程
2. set.seed(314)
3.
4. tre_tig <- trewolow %>%
5. tue_rid(rsampes = chrnols,
6. grid = reegid)

 

查看我们的超参数调整的结果。

从下面的结果中,我们看到对于我们网格中的每个超参数组合。

下面 ​​mean​​ 结果中的列表示获得的性能指标的平均值。

 

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_决策树_04

我们可以使用该 ​​select_best()​​​ 模型从我们的调优结果中选择具有最佳整体性能的模型。在下面的代码中,我们指定根据 ​​roc_auc​​ 指标选择性能最佳的模型。

我们看到成本复杂度为 1-10、树深度为 15、最小 n 为 40 的模型产生了最佳模型。

  1.  ## 根据roc_auc选择最佳模型
  2.  besree <- te_uin %>%

 

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_随机森林_05

完成工作流程

超参数调整的最后一步是 将我们的最佳模型添加到我们的工作流对象中。

可视化结果

为了可视化我们的决策树模型,我们需要使用该 ​​fit()​​ 函数手动训练我们的工作流对象。

此步骤是可选的,因为并非所有应用程序都需要可视化模型。但是,如果目标是了解 模型预测某些值的原因 ,那么建议这样做。

下一节将展示如何拟合模型以 自动获得测试集的性能。

 

拟合模型

接下来,我们将工作流程与训练数据相匹配。这是通过将我们的工作流对象传递给 ​​fit()​​ 函数来完成的。

  1.   
  2.   fit(data = chning)

 

探索我们的训练模型变量的重要性

一旦我们在训练数据上训练了我们的模型,我们就可以使用该 ​​vip​​ 函数研究变量的重要性。

  1.  teeit <- tree__it %>%
  2.   pull_orfowit()

 

变量重要性

接下来我们传递 ​​tree_fit​​​ 给 ​​vip()​​ 函数。

我们从下面的结果中看到最重要的预测因子。

vip(teeit)

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_数据_06

 

决策树图

我们可以可视化训练好的决策树。

这种可视化是一种工具,用于传达经过训练的决策树的预测规则。

很多时候,决策树图会很大并且难以阅读。有专门的软件包 ​​R​​​ 用于放大决策树图的区域。
 

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_决策树_07

训练和评估 

接下来,我们将最终模型工作流程拟合到训练数据并评估测试数据的性能。

该 函数将使我们的工作流程适合训练数据,并根据我们的 ​​chuplit​​ 对象定义的测试数据生成预测。

  1.  tre_latit <- fil_tewklow %>%
  2.   last_fit(chnpit)

我们可以在测试数据上查看我们的性能指标

tre_lft %>% collect_metrics()

 

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_随机森林_08

ROC曲线

我们可以绘制 ROC 曲线来可视化我们调整的决策树的测试集性能

treatft %>% collect_predictions() %>%

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_决策树_09

 

混淆矩阵

我们看到我们的模型在我们的测试数据集上产生了 80 个假阴性和 57 个假阳性。

tre_pcis <- tre_s_t %>% collect_predictions()

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_随机森林_10

 
 

随机森林

在本节中,我们将为 ​​chudf​​ 数据拟合一个随机森林模型。随机森林采用决策树并在预测准确性方面构建更强大的模型。支持该算法的主要机制是对训练数据进行重复采样(替换)以生成一系列决策树模型。然后对这些模型进行平均以获得预测空间中给定值的单个预测。

随机森林模型选择预测变量的随机子集,用于在树构建过程中分割预测空间。算法的每次迭代都会这样做,通常是 100 到 2,000 次。

 

数据特征工程

我们已经将我们的数据分成训练、测试和交叉验证集,并训练了我们的特征工程,  ​​chucipe​​. 这些可以在我们的随机森林工作流程中重复使用。

 

模型

接下来,我们指定具有以下超参数的随机森林分类器:

  • ​mtry​​:创建树模型时在每次拆分时随机抽样的预测变量的数量
  • ​trees​​:要拟合并最终平均的决策树的数量
  • ​min_n​​: 节点进一步分裂所需的最小数据点数

要指定具有 的随机森林模型 ,我们需要该 ​​ranorest()​​ 函数。

 

工作流程

接下来,我们将我们的模型和配方组合到一个工作流中,以轻松管理模型构建过程。

f_orkflw <- workflow() %>%

 

超参数调优

随机网格搜索

我们将对随机森林超参数进行网格搜索,并在交叉验证期间根据 ROC 曲线下的面积选择性能最佳的模型。

在上一节中,我们曾经 ​​gridlar()​​ 创建一个超参数值网格。这创建了推荐默认值的常规网格。

另一种进行超参数调整的方法是创建一个 随机 的值网格。许多研究表明,这种方法比常规网格方法做得更好。

在下面的代码中,我们将范围设置为 4 到 12。

  1.  ## 创建一个超参数值的网格来测试
  2.   
  3.  set.sd(314)
  4.   
  5.  rf_gd <- grid_random(mry() %>% range_set

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_随机森林_11

调整超参

为了从我们的调整网格中找到超参数的最佳组合,我们将使用该 ​​tugid()​​ 函数。

  1.  ## 调整随机森林工作流程
  2.  set.seed(314)
  3.   
  4.  rftin <- rfwoflow %>%
  5.   tune_grid(resamples = cu_olds,
  6.   grid = r_id)

 

查看我们的超参数调整的结果。

 

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_决策树_12

我们可以使用模型从我们的调优结果中选择具有最佳整体性能的模型。在下面的代码中,我们指定根据 ​​rocauc​​ 指标选择性能最佳的模型。

  1.  ## 根据roc_auc选择最佳模型
  2.  berf <- rftunng %>%
  3.   select_best

 

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_随机森林_13

完成工作流程

超参数调整的最后一步是 将我们的最佳模型添加到我们的工作流对象中。

  1.  fina_rkflow <- rfow %>%
  2.   finaflow(betrf)

变量重要性

为了可视化随机森林模型的可变重要性分数。
 

拟合模型

接下来,我们将工作流程与训练数据相匹配。这是通过将我们的工作流对象传递给 ​​fit()​​ 函数来完成的。

  1.  rf_it <- fnalrfrlow %>%
  2.   fit(data = crnranng)

 

一旦我们在训练数据上训练了我们的模型,我们就可以研究变量的重要性。

第一步是从我们的工作流拟合中提取训练好的模型。

  1.  rf <- ft %>%
  2.   pll_orfow_fit()

 

变量重要性

从我们的模型返回一个 ​​ggplot​​ 具有可变重要性分数的对象。重要性分数基于通过超参数随机选择的具有最大预测能力的预测变量。

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_数据_14

训练和评估

接下来,我们将最终模型工作流程拟合到训练数据并评估测试数据的性能。

使我们的工作流程拟合训练数据,并根据测试数据生成预测。

我们可以在测试数据上查看我们的性能指标

rf_tfit %>% cole_trcs()

 

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_决策树_15

ROC曲线

我们可以绘制 ROC 曲线来可视化随机森林模型的测试集性能。

  1.  rflafit %>% collepedions() %>%
  2.  roc_ve(trth = cncele_srice, estimate = .rd_es) %>%
  3.  autplot()

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_数据_16

 

混淆矩阵

我们看到我们的模型在我们的测试数据集上产生了 61 个假阴性和 48 个假阳性,优于我们的决策树模型。

  1.   
  2.  conf_mat(predis, truth = cncervice, estimate = .prd_las)

R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_随机森林_17


R语言决策树和随机森林分类电信公司用户流失churn数据和参数调优、ROC曲线可视化_数据_18

标签:训练,模型,ROC,调优,参数,随机,churn,我们,决策树
From: https://blog.51cto.com/u_14293657/5835843

相关文章

  • process hacker related
    DependencyWalker的替代品Dependencies:https://blog.csdn.net/aoq72569/article/details/101695873Itsprojectwebsite:https://processhacker.sourceforge.io/......
  • Image Processing and Computer Vision_Review
    翻译HPatches:手工和学习本地描述符的基准和评估——​​http://tongtianta.site/paper/8979​​ 摘要:在本文中,我们提出了一个评估本地图像描述符的新基准。我们证明现有数......
  • Image Processing and Computer Vision_Review
    翻译本地描述符的性能评估——​​http://tongtianta.site/paper/56756​​ 摘要-在本文中,我们比较了为局部感兴趣区域计算的描述符的性能,例如,由Harris-Affine检测器[32]......
  • Image Processing and Analysis_15_Image Registration
    此主要讨论图像处理与分析。虽然计算机视觉部分的有些内容比如特征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以及它们的出处,没有把它们纳入到图像......
  • Image Processing and Analysis_21_Scale Space
    此主要讨论图像处理与分析。虽然计算机视觉部分的有些内容比如特征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以及它们的出处,没有把它们纳入到图像......
  • Image Processing and Computer Vision_Review
    翻译一项关于视觉特征检测的最新进展概述(作者已被接受的手稿) 和​​Asurveyofrecentadvancesinvisualfeaturedetection——2014.08​​内容相同,文章布局和图表更清......
  • Image Processing and Computer Vision_Review
    翻译一项关于视觉特征检测的最新进展概述——​​http://tongtianta.site/paper/56761​​ 摘要-特征检测是计算机视觉和图像处理中的基础和重要问题。这是一个低级处理步......
  • Image Processing and Analysis_21_Scale Space
    此主要讨论图像处理与分析。虽然计算机视觉部分的有些内容比如特征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以及它们的出处,没有把它们纳入到图像......
  • QProcess 调用.py脚本(windows + python 环境)
    1QProcessp;2QStringListargs1;3args1.append("demo.py");//设置py脚本4p.setWorkingDirectory("d:/demo/");//设置py脚本所在目录5p......
  • HM-RocketMQ2.1【案例介绍、技术选型】
    1案例介绍1.1业务分析模拟电商网站购物场景中的【下单】和【支付】业务1.1.1下单用户请求订单系统下单订单系统通过RPC调用订单服务下单订单服务调用优惠券服务......