问题标签 [random-forest]

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.

0 投票
1 回答
2997 浏览

r - randomForest 的重要性只包含 MeanDecreaseGini

我有两个脚本,它们都在R中生成随机森林,据我所知,它们具有相同的输入,尽管我的问题表明情况并非如此。其中一个返回一个重要性表,其中包含

row.names importance.blue importance.red importance.MeanDecreaseAccuracy importance.MeanDecreaseGini

另一个重要性表只包含

这两个森林之间有什么区别,更重要的是,考虑到我认为相同的输入,是什么导致了差异?

(脚本太大,无法粘贴在这里,但两者都试图根据一堆连续变量来预测一个因素)

0 投票
1 回答
1819 浏览

r - 为无监督学习生成合成数据

我想为随机森林的无监督学习准备数据。程序如下:

  • 获取数据并将值为 1 的属性“类”添加到所有示例
  • 从原始数据生成合成数据:
    • 虽然您没有与原始数据构建示例相同数量的示例:
      • 从原始数据中该属性的所有值中采样新的属性值
      • 对所有属性执行此操作并将它们组合到新示例中
  • 分配给合成数据值 2 的属性“类”
  • 将两个数据绑定在一起

最后它看起来像这样:

我的 R 代码如下所示:

很明显,我对 R 真的很陌生,但它确实有效——只有一个问题:合成数据中的属性类型与原始数据中的不同。如果原来它们是 nums,那么现在它们变成了因数。如何在生成合成数据时保留相同的类型?

谢谢!

Data1(数字成为因素):

结构(列表(V2 = c(1.51793, 1.51711, 1.51645, 1.51916, 1.51131), V3 = c(13.21, 12.89, 13.44, 14.15, 13.69), V4 = c(3.48, 3.62, 3.61, 0, 3.2), V5 = c(1.41, 1.57, 1.54, 2.09, 1.81), V6 = c(72.64, 72.96, 72.39, 72.74, 72.81), V7 = c(0.59, 0.61, 0.66, 0, 1.76), V8 = c(8.43, 8.11, 8.03, 10.88, 5.43), V9 = c(0, 0, 0, 0, 1.19), V10 = c(0, 0, 0, 0, 0), realClass = structure(c(1L, 2L, 2L) , 5L, 6L), .Label = c("1", "2", "3", "5", "6", "7"), class = "factor")), .Names = c(" V2”、“V3”、“V4”、“V5”、“V6”、“V7”、“V8”、“V9”、“V10”、“realClass”),row.names = c(27L, 138L, 77L, 183L, 186L), 类 = "data.frame")

Data2(因子变为 chrs):

结构(列表(realClass =结构(c(2L,2L,2L,1L,2L),.Label = c(“e”,“p”),类=“因子”),V2 =结构(c(6L, 3L, 4L, 6L, 6L), .Label = c("b", "c", "f", "k", "s", "x"), class = "factor"), V3 = structure( c(4L, 4L, 3L, 1L, 1L), .Label = c("f", "g", "s", "y"), class = "factor"), V4 = structure(c(5L, 5L, 5L, 3L, 4L), .Label = c("b", "c", "e", "g", "n", "p", "r", "u", "w", "y"), class = "factor"), V5 = structure(c(1L, 1L, 1L, 2L, 1L), .Label = c("f", "t"), class = "factor"), V6 = 结构(c(3L, 9L, 3L, 6L, 3L), .标签 = c("a", "c", "f", "l", "m", "n", "p", "s", "y"), class = "factor"), V7 =结构(c(2L, 2L, 2L, 2L, 2L), .Label = c("a", "f"), class = "factor"), V8 = structure(c(1L, 1L, 1L, 1L, 1L), .Label = c("c", "w"), class = "factor"), V9 = structure(c(2L, 2L, 2L, 1L, 1L), .Label = c("b", "n"), class = "factor"), V10 = structure(c(1L, 1L, 1L, 10L, 4L), .Label = c("b", "e", "g", "h", “k”,“n”,“o”,“p”,“r”,“u”,“w”,“y”),类 =“因子”),V11 = 结构(c(2L,2L, 2L, 2L, 1L), .标签 = c("e", "t"), class = "factor"), V12 = structure(c(NA, NA, NA, 1L, 1L), .Label = c("b", "c", "e", "r"), class = "factor"), V13 = structure(c(3L, 2L, 3L, 3L, 2L), .Label = c("f", "k", "s", "y"), class = "factor"), V14 = structure(c(3L, 3L, 2L, 3L, 2L), .Label = c("f", "k", "s", "y") , class = "factor"), V15 = structure(c(7L, 8L, 7L, 4L, 7L), .Label = c("b", "c", "e", "g", "n", “o”、“p”、“w”、“y”)、类 =“因子”)、V16 = 结构(c(7L、7L、8L、4L、1L),.Label = c(“b”, “c”、“e”、“g”、“n”、“o”、“p”、“w”、“y”),类 = “因子”),V17 = 结构(c(1L,1L,1L,1L,1L),.标签 = “p”,类 = “因子”),V18 = 结构(c(3L,3L,3L,3L,3L),.Label = c(“n”,“o”,“w”,“y” ), 类 = "因子"), V19 = 结构 (c(2L, 2L, 2L, 2L, 2L), .Label = c("n", "o", "t"), 类 = "因子") , V20 = 结构(c(1L, 1L, 1L, 5L, 3L), .Label = c("e", "f", "l", "n", "p"), class = "factor") , V21 = 结构(c(8L, 8L, 8L, 4L, 2L), .Label = c("b", "h", "k", "n", "o", "r", "u" , "w","y"), class = "factor"), V22 = structure(c(5L, 5L, 5L, 5L, 6L), .Label = c("a", "c", "n", "s", "v", "y"), class = "factor"), V23 = structure(c(3L, 3L, 5L, 1L, 2L), .Label = c("d", "g", "l", “m”、“p”、“u”、“w”)、class =“因子”))、.Names = c(“realClass”、“V2”、“V3”、“V4”、“V5”、 “V6”、“V7”、“V8”、“V9”、“V10”、“V11”、“V12”、“V13”、“V14”、“V15”、“V16”、“V17”、“V18” ", "V19", "V20", "V21", "V22", "V23"), row.names = c(4105L, 6207L,6696L, 2736L, 3756L), 类 = "data.frame")

0 投票
1 回答
7992 浏览

r - R randomForest 的 rfcv 方法实际上是否说明了它选择了哪些功能?

在创建具有更多树的最终随机森林之前,我想使用 rfcv 从数据集中剔除不重要的变量(如果这不是使用此函数的方法,请更正并通知我)。例如,

在这种情况下,如果我正确理解结果,似乎我们可以删除三个变量而不会产生负面影响。然而,

这些插槽都没有告诉我可以从数据集中无害地删除的前三个变量实际上是什么。

0 投票
1 回答
4931 浏览

r - 带有调优和交叉验证的随机森林优化

我正在处理一个大型数据集,因此希望删除无关变量并调整每个分支的最佳 m 变量。在 R 中,有两种方法,rfcv 和 tuneRF,可以帮助完成这两个任务。我正在尝试将它们组合起来以优化参数。

rfcv 的工作原理大致如下:

目前,我已将 rfcv 重新编码为如下工作:

当然,这会将运行时间增加一个数量级。我的问题是这是多么必要(使用玩具数据集很难得到一个想法),以及是否可以预期任何其他方式在更短的时间内大致同样有效。

0 投票
0 回答
809 浏览

matlab - Matlab TreeBagger Cost 参数不起作用,因为它与类似的函数 fitensemble 一起使用

我的 TreeBagger 类和 fitensemble(Bag 方法)的成本矩阵都[0 8;1 0]用于二元分类。fitensemble 上的混淆矩阵表明,分类倾向于有利于代价高的类(比如[100 0; 20 80]有利于假阴性。混淆就像[100 10; 10 80]没有成本参数)但在 TreeBagger 上同样不成立。我已经阅读了 TreeBagger 代码,它直接将成本传递给每棵树(在本例中为 classregtree)。我已经在 3 个数据集上尝试过,TreeBagger 似乎忽略了成本。我省略了成本参数,混淆矩阵就像你根本不给出成本一样。我的代码有问题还是 TreeBagger 有问题?(顺便说一句,问题不是对混淆矩阵的误解,它只是不起作用)。还有任何替代 TreeBagger 的方法可以给我可变的重要性、数据和异常值集群以及成本有效吗?

我的代码

不工作的树人

适合的工作

谢谢您的帮助。

0 投票
1 回答
2470 浏览

machine-learning - scikit-learn RandomForestClassifier 产生“意外”结果

我正在尝试将 sk-learn 的 RandomForestClassifier 用于二进制分类任务(正面和负面示例)。我的训练数据包含 1.177.245 个示例,具有 40 个特征,采用 SVM-light 格式(稀疏向量),我使用 sklearn.dataset 的 load_svmlight_file 加载。它产生一个“特征值”(1.177.245 * 40)的稀疏矩阵和一个“目标类”数组(1和0,其中1.177.245)。我不知道这是否令人担忧,但训练数据有 3552 个正数,其余均为负数。

由于 sk-learn 的 RFC 不接受稀疏矩阵,因此我使用 .toarray() 将稀疏矩阵转换为密集数组(如果我说的没错?很多 0 表示缺少的特征)。我在转换为数组之前和之后打印矩阵,这似乎一切正常。

当我启动分类器并开始将其拟合到数据时,它需要很长时间:

(那个输出对吗?那963分钟大约需要2个半......)

然后我使用 joblib.dump 转储它。当我重新加载它时:

并在真实的训练数据上进行测试(由 750.709 个示例组成,与训练数据的格式完全相同)我得到“意外”的结果。准确地说;测试数据中只有一个示例被归类为真。当我对一半的初始训练数据进行训练并在另一半进行测试时,我根本没有得到任何正面结果。

现在我没有理由相信正在发生的事情有什么问题,只是我得到了奇怪的结果,而且我认为这一切都完成得非常快。进行比较可能是不可能的,但是使用 rt-rank(也有 1500 次迭代,但有一半的核心)在相同的数据上训练一个 RFClassifier 需要超过 12 个小时......

谁能告诉我我是否有理由相信某些事情没有按预期的方式工作?可能是训练数据中正负的比率吗?干杯。

0 投票
1 回答
16946 浏览

r - 随机森林分类的​​ ROC 曲线

randomForest在 R 平台中使用包进行分类任务。

其中 k 的范围从 0.1 到 0.9。

我有随机森林分类器的输出,并将其与标签进行了比较。所以,我有 9 个截止点的性能指标,如准确性、MCC、灵敏度、特异性等。

现在,我想绘制 ROC 曲线并获得 ROC 曲线下的面积,看看性能有多好。R 中的大多数包(如 ROCR、pROC)都需要预测和标签,但我有敏感性(TPR)和特异性(1-FPR)。

如果截止方法正确或可靠地产生ROC曲线,有人可以建议我吗?您知道使用 TPR 和 FPR 获得 ROC 曲线和曲线下面积的任何方法吗?

我还尝试使用以下命令来训练随机森林。这样,预测是连续的,并且可以被 R 中的包所接受ROCRpROC但是,我不确定这是否是正确的做法。有人可以向我推荐这种方法吗?

感谢您花时间阅读我的问题!我为此花了很长时间冲浪。感谢您的建议/建议。

0 投票
3 回答
1849 浏览

r - 大型 xdf 文件上的随机森林,无需读入数据帧

有没有办法在大型(大约 10gb)xdf(revolution R 格式)文件上运行随机森林?显然,我可以尝试 rxReadXdf 并将其转换为数据帧……但我的机器只有 8gb 内存,将来我可能会处理更大的数据集。例如,使用 foreach 循环,我想在我的四核机器上运行 1000 棵树:

但 randomForest 无法接收“train”(一个 xdf)文件。有没有办法直接在 xdf 上运行随机森林而不读取数据帧?

干杯,agsub

0 投票
1 回答
529 浏览

r - 用于变量选择的 R 滚动随机森林

自 2008 年以来,我有一个 Euro Stoxx 50 指数的每日 OHLC 数据集,如下所示:

我已经使用这个TTR包计算了几个技术规则。因此,我得到了一个更大的数据集:

我想知道每个工作季度最重要的技术规则是什么。我决定使用已在randomForest包中编码的随机森林 RI 算法,计算 Breiman 重要性度量(感谢该importance函数)并选择具有大于季度样本平均值的可变重要性度量的技术规则. 最终,我想得到整个周期的技术规则的缩减数据集,用于计算统计等。

考虑到重要技术规则的数量可能随时间变化,包含最重要技术规则的阵列的尺寸从四分之一到另一个都不相同。因此,我不能将所有值都放在一个对象中。

有没有一种方便的方法来存储我所有的季度数据集?

谢谢。

0 投票
1 回答
198 浏览

r - R 特殊数据框

我在问一个问题,这个问题是我昨天在这篇文章中提出的问题:用于变量选择的随机森林

我设法找出每个季度最重要的技术交易规则。我已经建立了一个数据框来放置这些 TTR 的名称。就是这样,我有一个季度的专栏。

我已经添加NA以应对不同长度的行。

现在,我想回到我的数据集,它看起来像这样:

我想做的是NA在 TTR 不重要的时期放置一个。例如,如果 RSI2 TTR 在第一季度不显着,我想用NAs 替换数值,但如果 R​​SI2 在第五季度显着,我想保留数值。

最后,我应该得到一个与初始数据框尺寸相同的数据框。

任何的想法?谢谢!