问题标签 [r-ranger]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - R ranger 包中的预测概率
我正在尝试使用随机森林分类在 R 中构建模型。(通过 Ned Horning 编辑代码)我首先使用randomForest
package 但后来 found ranger
,它承诺更快的计算。
起初,我使用下面的代码在拟合模型后获得每个类的预测概率randomForest
:
这里的概率类型如下:
我们在模型中有 500 棵树,其中 250 棵表示观察结果为 1 类,因此概率为 250/500 = 50%
在ranger
,我意识到没有type = 'prob'
选择。
我搜索并尝试了一些调整,但没有任何进展。我需要一个包含上面提到的概率的对象ranger
。
有人可以就这个问题提供一些建议吗?
r - ranger.forest的组件含义
我正在使用ranger,它是随机森林的快速实现。问题是我不知道如何解释$forest
结果的组成部分。文件只是说
forest
:保存的森林(如果write.forest
设置为TRUE
)。请注意,split.varIDs
对象中的变量 ID 不一定代表 R 中的列号。
嗯,这并没有真正的帮助,所以我尝试自己检查它的组件,它们的名称不是不言自明的。
像这样的一些组件num.trees
很容易理解,但像这样child.nodeIDs
的东西真的令人兴奋。
它是否记录在某处?
r - 有没有人尝试过使用带有游侠回归模型的 iml 包中的 Shapley 函数?
我正在尝试使用 iml 包来构建 Shapely 图。根据包和这篇文章中给出的文档,如果使用的模型不是来自受支持的包(如插入符号),则必须定义自定义预测函数。当我尝试使用用于回归的游侠模型尝试 Shapely 绘图时,出现错误。
我正在执行的代码:
responseData <- as.numeric(as.vector(AAads[,depVar]))
predFunction <- function(model, newData) {
results <- predict(object = model, data = newData)
results <- as.numeric(as.vector(results$predictions))
return(results)
}
到目前为止没有错误,当我为数据实例的 Shapely plot 执行以下代码时,出现错误:
shapley = Shapley$new(predictor = predictorRf, x.interest = trainingData[1,])
(函数(模型,newData)中的错误:未使用的参数(newdata = list(30、6063047、523433、51、36、8、6、5、3、1、2、4、3、2、42、0.226619379129261))
错误显示的值列表是第一行值 trainingData[1,]
在这里,“AAads”是一个数据框,其中包含用于训练和测试模型的所有数据,“trainingData”是它的一个子集。“rfModel”是一个游侠回归模型。“numVars”和“factVars”是数值和因子自变量列表,“noiseInformation”是用作自变量的随机数据,用于检查变量重要性、PDP 和 Shapely 图的健全性。
注意:我可以使用替代解决方案,例如通过插入符号的训练功能构建游侠模型或使用支持的 randomForest,但我有兴趣了解我目前的方法缺少什么。一种猜测是,我在自变量中有分类数据,即使存在分类数据,Shapely 也可能只获取数值数据。我认为是这样,因为当我查看错误时,我只看到分类数据也应该存在的整数。
r - 从R中的随机森林(RF)中提取每个样本在森林中分配的叶子指数
我正在尝试将代码从 Python 转换为 R,以便按照此博客文章中的说明使用随机森林和 UMAP 进行有监督的降维。
我需要获取一个数组,其中包含每个样本在森林中分配给的叶索引,以便我可以将此信息输入{uwot} 包(用于 UMAP)。
我想从以下 R 包中获取此信息:{randomForest}、{ranger}和{extraTrees}。ranger
预计需要最低的计算时间(对我的项目至关重要),并且ExtraTrees
在某些情况下,可以胜过RF实现(就 而言AUC
)。
在 Python 中,scikit-learn
返回ExtraTreesClassifier
一个 numpy 数组,其中包含每个样本在森林中分配给的叶索引,如下所示:
为了使事情尽可能地具有可比性,R/Python
我们将在reticulate
关注博客(但减少模拟数据的大小)时使用 Python 首当其冲地只比较各种RF实现。
Python 实现
现在在 Python 解释器中
用于ExtraTreesClassifier
从叶索引和绘图中获取信息。
在博文中,作者使用了StratifiedKFold
& cross_val_predict
。在这里,我train_test_split
改为创建训练/测试拆分。这样,我可以对 Python 和 R使用相同的训练/拆分,并确保ROC 曲线测量下的面积具有可比性。
模型性能为0.8504 AUC。现在我们继续进行嵌入。
numpy
数组的维度是多少
(10000, 100)
这显示了 19 个集群(模拟数量为 20)。
R 实施
现在使用我们用 Python 模拟的相同数据R
创建一个,并使用'sdata.frame
拆分为训练/测试:sklearn
train_test_split
随机森林
首先,randomForest
包(最古老、最知名但不是最优化的包之一):
模型性能为0.8919 AUC。这比我们在 Python 中看到的要好一些(虽然慢了一点)
现在就像我们在 python 中所做的那样,我们需要对其进行训练并将其应用于整个数据集,跟踪每个样本被分配到森林中的哪些叶子。
将其带回 Python 并绘制repl_python()
:
这显示了 12 个集群(尽管模拟的数量是 20)。我很困惑,考虑到这种方法的AUC更高,我发现更少的集群?
众所周知,其他 R 包在准确性和速度方面都优于其他 R 包,randomForest
所以我也想从ranger
和获取这些信息ExtraTrees
。例如,“ranger”具有出色的速度并支持高维或宽数据(例如scRNA 测序数据)
游侠
到目前为止,这是我使用该ranger
方法得到的结果:
该模型在0.5471 AUC时表现不佳。
现在在 enterrepl_python()
和 Python 中输入:
这显示了 17 个集群(尽管模拟的数量是 20)。
额外的树
该extraTrees
方法可能scikit-learn
是与's最接近的比较ExtraTreesClassifier
。
更新:此时无法从 { extraTrees
} 获取叶索引,因此我提出了功能请求。
h20
在这个优秀的基准 repo中,机器学习库h2o
被证明可以实现更高的AUC,所以我也想尝试一下。我将在所有其他方法中使用1 core
和喜欢。ntrees = 100
模型性能为0.9077 AUC - 这是迄今为止最好的。我不确定是否可以获得分配的叶子索引?
随机森林至少有32 个 R 包。
如果有人熟悉其他可以获取叶子索引的具有良好性能的软件包,我很想知道它。如果您发现任何错误,请告诉我,谢谢。
r - 使用 xgb 和 ranger 的特征重要性图。最好的比较方法
我正在编写一个既训练游侠随机森林又训练 xgb 回归的脚本。根据基于 rmse 的性能最佳,一个或另一个用于测试保留数据。
我还想以类似的方式返回两者的特征重要性。
使用 xgboost 库,我可以获得我的特征重要性表并绘制如下图:
然后我可以像这样绘制它:
那是使用 xgboost 库及其功能。使用 ranger random forrest,如果我拟合回归模型,如果我在拟合模型时包含,我可以获得特征重要性importance = 'impurity'
。然后:
我可以创建一个ggplot。但是,ranger 在该表中返回的值与 xgb 在图中显示的值之间的比例完全不同。
是否有开箱即用的库或解决方案,我可以在其中以类似的方式绘制 xgb 或 ranger 模型的特征重要性?
r - 带有 ranger 包的 fit_resamples 失败
尝试使用交叉重采样并从 ranger 包中拟合随机森林。没有重新采样的拟合有效,但是一旦我尝试重新采样拟合,它就会失败并出现以下错误。
考虑以下df
遵循简单的适合工作没有问题
但是只要我想通过
跟随错误
模型:parse.formula 中的错误(公式,数据,env = parent.frame()):错误:公式界面中的列名非法。修复列名或在 ranger 中使用替代接口。
r - Ranger 预测数据框中每一行的类别概率
关于这个链接Predicted probabilities in R ranger package,我有一个问题。
想象一下,我有一个混合数据框 df(由因子和数值变量组成),我想使用 ranger 进行分类。我将此数据框拆分为测试集,并将训练集拆分为 Train_Set 和 Test_Set。BiClass 是我的预测因子变量,包含 0 和 1(2 个级别)
我想使用 ranger 使用以下命令计算类概率并将其附加到数据框:
数据框概率是由 2 列(0 和 1)组成的数据框,其行数等于 Test_Set 中的行数。
这是否意味着,如果我附加或附加此数据框,即作为最后两列的 Test_Set 的概率,它显示每行为 0 或 1 的概率?我的理解正确吗?
我的第二个问题,当我尝试计算混淆矩阵时
我收到以下错误:表中的错误(Test_Set$BiClass,pred$predictions):所有参数必须具有相同的长度
我究竟做错了什么?
r - 使用 expand.grid 和 purrr::pmap 时,R ranger chaos.matrix 比预期的要大
很抱歉今天所有与 purrr 相关的问题,仍在试图弄清楚如何有效地利用它。
因此,在 SO 的帮助下,我设法根据来自 data.frame 的输入值运行随机森林护林员模型。这是使用purrr::pmap
. 但是,我不明白返回值是如何从被调用函数生成的。考虑这个例子:
它应该返回 3*3 混淆矩阵的 4 倍,因为 中有 3 个级别iris$Species
,而是返回巨大的混淆矩阵。有人可以向我解释发生了什么吗?
第一行:
r - 混淆矩阵的构建
我有一个关于从以下链接构建混淆矩阵的问题:Ranger Predicted Class Probability of each row in a data frame
例如,如果我有以下代码(如链接中的答案所述):
调用
并且,使用这个
这是创建混淆矩阵的正确方法,因为灵敏度、特异性、ppv、npv 的值不同,因为 tp、tn、fp、fn 切换?
如果我要求正类为 1 而不是使用
所以,矩阵中的值是 tp = 13,tn = 36,fp = 0,fn = 1,对吗?
我对如何读取混淆矩阵的值感到困惑。
r - R(Ranger)中因子变量中具有不同水平的相同测试集数据的不同预测
我有一个训练数据train
,其中distance
和dest_zip_code
作为预测变量来预测delivery_days
。我正在使用ranger
RF 模型创建“分位数 RF 回归”模型对象。请注意,dest_zip_code
training_data 中的级别基于 6 个月。
现在,我有两个相同的测试集test_A
和test_B
test_A
从dest_zip_code
过去 2 个月开始,水平也基于过去 2 个月。test_B
从dest_zip_code
过去 2 个月开始,但级别被重构为持续 6 个月(与火车数据相同的级别)
当我predict
在具有相同训练模型对象的两个测试集上使用该函数时,至少有一半的预测是不同的。
- 有人可以帮助我了解具有相同观察结果的测试数据的不同分解级别如何影响预测吗?
- 哪一个在理论上是正确的?