标签: random-forest

决策树学习和杂质

测量杂质有三种方法:

熵

基尼指数

分类错误

每种方法有哪些差异和适当的用例?

machine-learning data-mining decision-tree random-forest

9
推荐指数
1
解决办法
6755
查看次数

如何从R中提取RandomForest以用于生产?

我有一个成功的随机森林模型,我想将它集成到另一个软件中,我知道我可以使用一些库(比如Java中的fastRF或ALGLIB的DecisionForest用于其他语言),但我如何使用R中训练的"模型"?我必须用新语言重新训练它吗?

另一种观点是以某种方式提取它,但我不知道该怎么做...

任何帮助将不胜感激

提前致谢

java r alglib random-forest

9
推荐指数
1
解决办法
4151
查看次数

执行随机森林时的最小观察次数

是否可以将RandomForests应用于非常小的数据集?我有一个包含许多变量的数据集,但每个只有25个观察值.随机森林产生合理的结果,低OOB误差(10-25%).关于使用的最小观测数量是否有任何经验法则?事实上,其中一个响应变量是不平衡的,如果我要对它进行二次采样,我最终会得到更少的观察结果.提前致谢

machine-learning random-forest sample-size

9
推荐指数
1
解决办法
1万
查看次数

随机森林由R包方供应随机数据

我正在研究随机森林分类.

我发现"party"包中的cforest通常比"randomForest"表现更好.
然而,似乎cforest容易过度装配.

一个玩具的例子

这是一个随机数据集,包括二进制因子的响应和从rnorm()生成的10个数值变量.

# Sorry for redundant preparation.
data <- data.frame(response=rnorm(100))
data$response <- factor(data$response < 0)
data <- cbind(data, matrix(rnorm(1000), ncol=10))
colnames(data)[-1] <- paste("V",1:10,sep="")
Run Code Online (Sandbox Code Playgroud)

执行cforest,使用无偏的参数集(可能推荐).

cf <- cforest(response ~ ., data=data, controls=cforest_unbiased())
table(predict(cf), data$response)
#       FALSE TRUE
# FALSE    45    7
# TRUE      6   42
Run Code Online (Sandbox Code Playgroud)

无意义数据的预测性能相当好.

另一方面,randomForest诚实地说.

rf <- randomForest(response ~., data=data)
table(predict(rf),data$response)
#       FALSE TRUE
# FALSE    25   27
# TRUE     26   22
Run Code Online (Sandbox Code Playgroud)

这些差异来自哪里?
我担心我会以错误的方式使用cforest.

让我在cforest中加入一些额外的观察:

  1. 变量的数量对结果影响不大.
  2. 与使用一些现实解释变量的那些相比,变量重要性值(由varimp(cf)计算)相当低.
  3. ROC曲线的AUC接近1.

我很感激你的意见.

附加说明

有些人想知道为什么训练数据集应用于predict().
我没有准备任何测试数据集,因为预测是针对OOB样本进行的,而cforest则不然.
cf http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

r random-forest

9
推荐指数
1
解决办法
5402
查看次数

PySpark和MLLib:随机森林预测的类概率

我正在尝试提取我使用PySpark训练的随机森林对象的类概率.但是,我没有在文档中的任何地方看到它的示例,也不是它的方法RandomForestModel.

如何从RandomForestModelPySpark中的分类器中提取类概率?

以下是文档中提供的示例代码,它仅提供最终类(而不是概率):

from pyspark.mllib.tree import RandomForest
from pyspark.mllib.util import MLUtils

# Load and parse the data file into an RDD of LabeledPoint.
data = MLUtils.loadLibSVMFile(sc, 'data/mllib/sample_libsvm_data.txt')
# Split the data into training and test sets (30% held out for testing)
(trainingData, testData) = data.randomSplit([0.7, 0.3])

# Train a RandomForest model.
#  Empty categoricalFeaturesInfo indicates all features are continuous.
#  Note: Use larger numTrees in practice.
#  Setting featureSubsetStrategy="auto" lets the algorithm choose.
model = RandomForest.trainClassifier(trainingData, …
Run Code Online (Sandbox Code Playgroud)

random-forest apache-spark pyspark apache-spark-mllib

9
推荐指数
2
解决办法
6980
查看次数

Python - 随机森林 - 迭代添加树

我在Python上做一些机器学习任务.我需要构建RandomForest,然后构建一个图表,显示训练和测试样本的质量如何取决于随机森林中的树木数量.是否有必要每次使用一定数量的树木建立一个新的随机森林?或者我可以以某种方式迭代地添加树(如果可能的话,你能给出代码的例子如何做到这一点)?

python random-forest scikit-learn

9
推荐指数
1
解决办法
4456
查看次数

在h2o随机森林中用于"重要性"的度量是多少?

这是我的代码:

set.seed(1)

#Boruta on the HouseVotes84 data from mlbench
library(mlbench) #has HouseVotes84 data
library(h2o)     #has rf

#spin up h2o
myh20 <- h2o.init(nthreads = -1)

#read in data, throw some away
data(HouseVotes84)
hvo <- na.omit(HouseVotes84)

#move from R to h2o
mydata <- as.h2o(x=hvo,
                 destination_frame= "mydata")

#RF columns (input vs. output)
idxy <- 1
idxx <- 2:ncol(hvo)

#split data
splits <- h2o.splitFrame(mydata,           
                         c(0.8,0.1))     

train <- h2o.assign(splits[[1]], key="train")   
valid <- h2o.assign(splits[[2]], key="valid") 

# make random forest
my_imp.rf<- h2o.randomForest(y=idxy,x=idxx,
                      training_frame = train,
                      validation_frame = …
Run Code Online (Sandbox Code Playgroud)

random-forest h2o gini

9
推荐指数
1
解决办法
5673
查看次数

为什么具有单个树的Random Forest比决策树分类器好得多?

我通过scikit-learn图书馆学习机器学习.我使用以下代码将决策树分类器和随机森林分类器应用于我的数据:

def decision_tree(train_X, train_Y, test_X, test_Y):

    clf = tree.DecisionTreeClassifier()
    clf.fit(train_X, train_Y)

    return clf.score(test_X, test_Y)


def random_forest(train_X, train_Y, test_X, test_Y):
    clf = RandomForestClassifier(n_estimators=1)
    clf = clf.fit(X, Y)

    return clf.score(test_X, test_Y)
Run Code Online (Sandbox Code Playgroud)

为什么随机森林分类器的结果更好(100次运行,随机抽样2/3的数据用于训练,1/3用于测试)?

100%|???????????????????????????????????????| 100/100 [00:01<00:00, 73.59it/s]
Algorithm: Decision Tree
  Min     : 0.3883495145631068
  Max     : 0.6476190476190476
  Mean    : 0.4861783113770316
  Median  : 0.48868030937802126
  Stdev   : 0.047158171852401135
  Variance: 0.0022238931724605985
100%|???????????????????????????????????????| 100/100 [00:01<00:00, 85.38it/s]
Algorithm: Random Forest
  Min     : 0.6846846846846847
  Max     : 0.8653846153846154
  Mean    : 0.7894823428836184
  Median  : 0.7906101571063208
  Stdev   : 0.03231671150915106
  Variance: 0.0010443698427656967 …
Run Code Online (Sandbox Code Playgroud)

python machine-learning decision-tree random-forest scikit-learn

9
推荐指数
1
解决办法
1441
查看次数

将 Pandas Interval 转换为字符串(然后再返回)

我对 Python 比较陌生,正在尝试准备一些数据来训练 RandomForest。由于各种原因,我们希望数据是离散的,所以有几个连续的变量需要离散化。我qcut在 Pandas 中找到了它,它似乎可以做我想做的事 - 我可以设置多个垃圾箱,它会将变量离散化到那么多垃圾箱中,试图保持每个垃圾箱中的计数均匀。

但是,输出的pandas.qcut是一个Intervals列表,scikit-learn中的RandomForest分类器需要一个字符串。我发现我可以使用.astype(str). 这是我正在做的事情的一个快速示例:

import pandas as pd
from random import sample

vals = sample(range(0,100), 100)
cuts = pd.qcut(vals, q=5)
str_cuts = pd.qcut(vals, q=5).astype(str)
Run Code Online (Sandbox Code Playgroud)

然后 str_cuts 是传入随机森林的变量之一。

但是,该系统的目的是训练 RandomForest,将其保存到文件中,然后允许某人在以后加载它并获得新测试实例的分类,这在训练时是不可用的。并且因为分类器是在离散化数据上训练的,所以新的测试实例需要在使用前进行离散化。所以我希望能够做的是在一个新实例中读取,将已经建立的离散化方案应用于它,将其转换为字符串,然后在随机森林中运行它。但是,我对“应用离散化方案”的最佳方式感到困惑。

有没有简单的方法来处理这个问题?我认为没有直接的方法可以将字符串转换回间隔。我可以从离散化(例如:)中获取所有 Interval 值的列表cuts.unique()并在测试时应用它,但这需要在随机森林旁边保存/加载离散化字典,这看起来很笨重,我担心会遇到问题试图重新创建一个分类变量(主要来自 R,它对分类变量的格式非常讲究)。或者还有其他我没有看到的解决方法吗?

python binning pandas random-forest discretization

9
推荐指数
1
解决办法
6262
查看次数

在 R 中使用 LongituRF 包实现纵向随机森林

我有一些高维重复测量数据,我对拟合随机森林模型感兴趣,以研究此类模型的适用性和预测效用。具体来说,我正在尝试实现LongituRF包中的方法。此处详细介绍了此包背后的方法:

Capitaine, L. 等。用于高维纵向数据的随机森林。Stat Methods Med Res (2020) doi:10.1177/0962280220946080。

方便地,作者提供了一些有用的数据生成功能进行测试。所以我们有

install.packages("LongituRF")
library(LongituRF)
Run Code Online (Sandbox Code Playgroud)

让我们生成一些数据,DataLongGenerator()其中 n=样本大小,p=预测变量的数量和 G=具有时间行为的预测变量的数量。

my_data <- DataLongGenerator(n=50,p=6,G=6)
Run Code Online (Sandbox Code Playgroud)

my_data是您期望的 Y(响应向量)、X(固定效应预测变量矩阵)、Z(随机效应预测变量矩阵)、id(样本标识符向量)和时间(时间测量向量)的列表。简单地拟合随机森林模型

model <- REEMforest(X=my_data$X,Y=my_data$Y,Z=my_data$Z,time=my_data$time,
                    id=my_data$id,sto="BM",mtry=2)
Run Code Online (Sandbox Code Playgroud)

这里大约需要 50 秒,所以请耐心等待

到目前为止,一切都很好。现在我清楚这里的所有参数,除了Z. 什么 Z 时候我要在我的实际数据上拟合这个模型?

看着my_data$Z

dim(my_data$Z)
[1] 471   2
head(my_data$Z)
      [,1]      [,2]
 [1,]    1 1.1128914
 [2,]    1 1.0349287
 [3,]    1 0.7308948
 [4,]    1 1.0976203
 [5,]    1 1.3739856
 [6,]    1 0.6840415
Run Code Online (Sandbox Code Playgroud)

每行看起来像一个截距项(即 1)和从均匀分布中得出的值runif()

的文档REEMforest()表明“Z [矩阵]:包含随机效应的 q 预测变量的 Nxq 矩阵。” 使用实际数据时如何指定这个矩阵?

我的理解是,传统Z是简单地一热(二进制)组变量(例如编码 …

regression r random-forest mixed-models longitudinal

9
推荐指数
1
解决办法
429
查看次数