原文链接:http://tecdat.cn/?p=26868
最近咱们被客户要求撰写对于电信公司用户散失的钻研报告,包含一些图形和统计输入。
在本教程中,咱们将学习笼罩决策树和随机森林。这些是可用于分类或回归的监督学习算法
上面的代码将加载本教程所需的包和数据集。
library(tidyverse)
# 电信客户流失率数据
churn <- read_rds(chuata.rds))
数据
花点工夫摸索上面的这个数据集 ( 查看文末理解数据获取形式 )。
此数据框中的一行代表一家电信公司的客户。每个客户都从该公司购买了电话和互联网服务。
此数据中的因变量变量 canceled
批示客户是否终止了他们的服务。
决策树
为了演示拟合决策树,咱们将应用 churn
数据集并应用所有可用的预测变量进行预测。
数据拆分
咱们将数据分成训练集和测试集。训练数据将进一步分为 5 折进行超参数调优。
# 记住肯定要设置你的随机数种子。chuit <- iniplit(cdf)
chining <- chulit %>% trang()
chuest <- chuplit %>% tesg()
#在训练数据集上创立穿插验证的
## 这些将被用于调整模型的超参数
chds <- vfcv(chung, v = 5)
特色工程
咱们将在训练数据上进行以下转换。
- 打消数值预测变量的偏度
- 标准化所有数字预测变量
- 为所有名义预测变量创立虚构变量
<!—->
chu_rep <- recipe(cace_srce ~ ., data = chutann) %>%
stepYeonon(al_nmeric(), -al_utcoms()) %>%
ste_nomaze(all_umic(), -al_oucoes()) %>%
ste_dumy(all_inal(), -al_otcomes())
让咱们检查一下特色工程步骤是否正确执行。
模型规格
接下来,咱们指定具备以下超参数的决策树分类器:
- 老本复杂度参数(又名 Cp 或 λ)
- 树的最大深度
- 节点中进一步拆分所需的最小数据点数。
工作流程
接下来,咱们将模型组合到一个工作流中,以轻松治理模型构建过程。
treow <- workflow()
超参数调优
咱们将对决策树超参数进行网格搜寻,并在穿插验证期间依据 ROC 曲线下的面积抉择性能最佳的模型。
请参见上面的示例,咱们在其中创立 tree_grid
对象。
## 创立一个超参数值的网格来测试
tr_gid <- girular(cotolty(),
teedeth(),
mnn(),
lvs = 2)
调整超参数 tune_grid()
为了从咱们的调整网格中找到超参数的最佳组合,咱们将应用该 tune_grid()
函数。
在咱们的 KNN 示例中,此函数将模型对象或工作流作为第一个参数,将穿插验证折叠作为第二个参数,将调整网格数据框作为第三个参数。
## 调整决策树工作流程
set.seed(314)
tre_tig <- trewolow %>%
tue_rid(rsampes = chrnols,
grid = reegid)
查看咱们的超参数调整的后果。
从上面的后果中,咱们看到对于咱们网格中的每个超参数组合。
上面 mean
后果中的列示意取得的性能指标的平均值。
咱们能够应用该 select_best()
模型从咱们的调优后果中抉择具备最佳整体性能的模型。在上面的代码中,咱们指定依据 roc_auc
指标抉择性能最佳的模型。
咱们看到老本复杂度为 1-10、树深度为 15、最小 n 为 40 的模型产生了最佳模型。
## 依据 roc_auc 抉择最佳模型
besree <- te_uin %>%
实现工作流程
超参数调整的最初一步是 将咱们的最佳模型增加到咱们的工作流对象中。
可视化后果
为了可视化咱们的决策树模型,咱们须要应用该 fit()
函数手动训练咱们的工作流对象。
此步骤是可选的,因为并非所有应用程序都须要可视化模型。然而,如果指标是理解 模型预测某些值的起因,那么倡议这样做。
下一节将展现如何拟合模型以 主动取得测试集的性能。
拟合模型
接下来,咱们将工作流程与训练数据相匹配。这是通过将咱们的工作流对象传递给 fit()
函数来实现的。
fit(data = chning)
摸索咱们的训练模型变量的重要性
一旦咱们在训练数据上训练了咱们的模型,咱们就能够应用该 vip
函数钻研变量的重要性。
teeit <- tree__it %>%
pull_orfowit()
变量重要性
接下来咱们传递 tree_fit
给 vip()
函数。
咱们从上面的后果中看到最重要的预测因子。
vip(teeit)
点击题目查阅往期内容
PYTHON 用户散失数据挖掘:建设逻辑回归、XGBOOST、随机森林、决策树、反对向量机、奢侈贝叶斯和 KMEANS 聚类用户画像
左右滑动查看更多
01
02
03
04
决策树图
咱们能够可视化训练好的决策树。
这种可视化是一种工具,用于传播经过训练的决策树的预测规定。
很多时候,决策树图会很大并且难以浏览。有专门的软件包 R
用于放大决策树图的区域。
训练和评估
接下来,咱们将最终模型工作流程拟合到训练数据并评估测试数据的性能。
该 函数将使咱们的工作流程适宜训练数据,并依据咱们的 chuplit
对象定义的测试数据生成预测。
tre_latit <- fil_tewklow %>%
last_fit(chnpit)
咱们能够在测试数据上查看咱们的性能指标
tre_lft %>% collect_metrics()
ROC 曲线
咱们能够绘制 ROC 曲线来可视化咱们调整的决策树的测试集性能
treatft %>% collect_predictions() %>%
混同矩阵
咱们看到咱们的模型在咱们的测试数据集上产生了 80 个假阴性和 57 个假阳性。
tre_pcis <- tre_s_t %>% collect_predictions()
随机森林
在本节中,咱们将为 chudf
数据拟合一个随机森林模型。随机森林采纳决策树并在预测准确性方面构建更弱小的模型。反对该算法的次要机制是对训练数据进行反复采样(替换)以生成一系列决策树模型。而后对这些模型进行均匀以取得预测空间中给定值的单个预测。
随机森林模型抉择预测变量的随机子集,用于在树构建过程中宰割预测空间。算法的每次迭代都会这样做,通常是 100 到 2,000 次。
数据特色工程
咱们曾经将咱们的数据分成训练、测试和穿插验证集,并训练了咱们的特色工程,chucipe
. 这些能够在咱们的随机森林工作流程中重复使用。
模型
接下来,咱们指定具备以下超参数的随机森林分类器:
mtry
:创立树模型时在每次拆分时随机抽样的预测变量的数量trees
:要拟合并最终均匀的决策树的数量min_n
: 节点进一步决裂所需的最小数据点数
要指定具备 的随机森林模型,咱们须要该 ranorest()
函数。
工作流程
接下来,咱们将咱们的模型和配方组合到一个工作流中,以轻松治理模型构建过程。
f_orkflw <- workflow() %>%
超参数调优
随机网格搜寻
咱们将对随机森林超参数进行网格搜寻,并在穿插验证期间依据 ROC 曲线下的面积抉择性能最佳的模型。
在上一节中,咱们已经 gridlar()
创立一个超参数值网格。这创立了举荐默认值的惯例网格。
另一种进行超参数调整的办法是创立一个 随机 的值网格。许多钻研表明,这种办法比惯例网格办法做得更好。
在上面的代码中,咱们将范畴设置为 4 到 12。
## 创立一个超参数值的网格来测试
set.sd(314)
rf_gd <- grid_random(mry() %>% range_set
调整超参
为了从咱们的调整网格中找到超参数的最佳组合,咱们将应用该 tugid()
函数。
## 调整随机森林工作流程
set.seed(314)
rftin <- rfwoflow %>%
tune_grid(resamples = cu_olds,
grid = r_id)
查看咱们的超参数调整的后果。
咱们能够应用模型从咱们的调优后果中抉择具备最佳整体性能的模型。在上面的代码中,咱们指定依据 rocauc
指标抉择性能最佳的模型。
## 依据 roc_auc 抉择最佳模型
berf <- rftunng %>%
select_best
实现工作流程
超参数调整的最初一步是 将咱们的最佳模型增加到咱们的工作流对象中。
fina_rkflow <- rfow %>%
finaflow(betrf)
变量重要性
为了可视化随机森林模型的可变重要性分数。
拟合模型
接下来,咱们将工作流程与训练数据相匹配。这是通过将咱们的工作流对象传递给 fit()
函数来实现的。
rf_it <- fnalrfrlow %>%
fit(data = crnranng)
一旦咱们在训练数据上训练了咱们的模型,咱们就能够钻研变量的重要性。
第一步是从咱们的工作流拟合中提取训练好的模型。
rf <- ft %>%
pll_orfow_fit()
变量重要性
从咱们的模型返回一个 ggplot
具备可变重要性分数的对象。重要性分数基于通过超参数随机抉择的具备最大预测能力的预测变量。
训练和评估
接下来,咱们将最终模型工作流程拟合到训练数据并评估测试数据的性能。
使咱们的工作流程拟合训练数据,并依据测试数据生成预测。
咱们能够在测试数据上查看咱们的性能指标
rf_tfit %>% cole_trcs()
ROC 曲线
咱们能够绘制 ROC 曲线来可视化随机森林模型的测试集性能。
rflafit %>% collepedions() %>%
roc_ve(trth = cncele_srice, estimate = .rd_es) %>%
autplot()
混同矩阵
咱们看到咱们的模型在咱们的测试数据集上产生了 61 个假阴性和 48 个假阳性,优于咱们的决策树模型。
conf_mat(predis, truth = cncervice, estimate = .prd_las)
数据获取
在上面公众号后盾回复“散失 数据”,可获取残缺数据。
点击文末 “浏览原文”
获取全文残缺材料。
本文选自《 R 语言决策树和随机森林分类电信公司用户散失 churn 数据和参数调优、ROC 曲线可视化》。
点击题目查阅往期内容
从决策树到随机森林:R 语言信用卡守约剖析信贷数据实例 \
PYTHON 用户散失数据挖掘:建设逻辑回归、XGBOOST、随机森林、决策树、反对向量机、奢侈贝叶斯和 KMEANS 聚类用户画像 \
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析 \
PYTHON 集成机器学习:用 ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜寻超参数优化 \
R 语言集成模型:晋升树 boosting、随机森林、束缚最小二乘法加权均匀模型交融剖析工夫序列数据 \
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析 \
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化 \
R 语言基于树的办法:决策树,随机森林,Bagging,加强树 \
R 语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测 \
spss modeler 用决策树神经网络预测 ST 的股票 \
R 语言中应用线性模型、回归决策树主动组合特色因子程度 \
R 语言中自编基尼系数的 CART 回归决策树的实现 \
R 语言用 rle,svm 和 rpart 决策树进行工夫序列预测 \
python 在 Scikit-learn 中用决策树和随机森林预测 NBA 获胜者 \
python 中应用 scikit-learn 和 pandas 决策树进行 iris 鸢尾花数据分类建模和穿插验证 \
R 语言里的非线性模型:多项式回归、部分样条、平滑样条、狭义相加模型 GAM 剖析 \
R 语言用规范最小二乘 OLS,狭义相加模型 GAM,样条函数进行逻辑回归 LOGISTIC 分类 \
R 语言 ISLR 工资数据进行多项式回归和样条回归剖析 \
R 语言中的多项式回归、部分回归、核平滑和平滑样条回归模型 \
R 语言用泊松 Poisson 回归、GAM 样条曲线模型预测骑自行车者的数量 \
R 语言分位数回归、GAM 样条曲线、指数平滑和 SARIMA 对电力负荷工夫序列预测 R 语言样条曲线、决策树、Adaboost、梯度晋升 (GBM) 算法进行回归、分类和动静可视化 \
如何用 R 语言在机器学习中建设集成模型?\
R 语言 ARMA-EGARCH 模型、集成预测算法对 SPX 理论稳定率进行预测在 python 深度学习 Keras 中计算神经网络集成模型 R 语言 ARIMA 集成模型预测工夫序列剖析 R 语言基于 Bagging 分类的逻辑回归 (Logistic Regression)、决策树、森林剖析心脏病患者 \
R 语言基于树的办法:决策树,随机森林,Bagging,加强树 \
R 语言基于 Bootstrap 的线性回归预测置信区间预计办法 \
R 语言应用 bootstrap 和增量法计算狭义线性模型(GLM)预测置信区间 \
R 语言样条曲线、决策树、Adaboost、梯度晋升(GBM) 算法进行回归、分类和动静可视化 \
Python 对商店数据进行 lstm 和 xgboost 销售量工夫序列建模预测剖析 \
R 语言随机森林 RandomForest、逻辑回归 Logisitc 预测心脏病数据和可视化剖析 \
R 语言用主成分 PCA、逻辑回归、决策树、随机森林剖析心脏病数据并高维可视化 \
Matlab 建设 SVM,KNN 和奢侈贝叶斯模型分类绘制 ROC 曲线 \
matlab 应用分位数随机森林(QRF)回归树检测异样值