标签: random-forest

R中的随机森林(y中的空类和参数legth 0)

我第一次使用随机森林进行处理,我遇到了一些我无法弄清楚的问题.当我对所有数据集(大约3000行)进行分析时,我没有收到任何错误消息.但是当我对我的数据集的子集(大约300行)执行相同的分析时,我收到一个错误:

dataset <- read.csv("datasetNA.csv", sep=";", header=T)
names (dataset)
dataset2 <- dataset[complete.cases(dataset$response),]
library(randomForest)
dataset2 <- na.roughfix(dataset2)
data.rforest <- randomForest(dataset2$response ~ dataset2$predictorA + dataset2$predictorB+ dataset2$predictorC + dataset2$predictorD + dataset2$predictorE + dataset2$predictorF + dataset2$predictorG + dataset2$predictorH + dataset2$predictorI, data=dataset2, ntree=100, keep.forest=FALSE, importance=TRUE)

# subset of my original dataset:
groupA<-dataset2[dataset2$order=="groupA",]
data.rforest <- randomForest(groupA$response ~ groupA$predictorA + groupA$predictorB+ groupA$predictorC + groupA$predictorD + groupA$predictorE + groupA$predictorF + groupA$predictorG + groupA$predictorH + groupA$predictorI, data=groupA, ntree=100, keep.forest=FALSE, importance=TRUE)

Error in randomForest.default(m, y, ...) : Can't have empty classes …
Run Code Online (Sandbox Code Playgroud)

r random-forest

13
推荐指数
3
解决办法
2万
查看次数

Scikit在测试集上学习 - fit_transform

我正在努力使用Scikit学习Python中的随机森林.我的问题是我用它进行文本分类(3个类 - 正/负/中性),我提取的特征主要是单词/ unigrams,所以我需要将它们转换为数字特征.我找到了一种方法做它DictVectorizerfit_transform:

from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import classification_report
from sklearn.feature_extraction import DictVectorizer

vec = DictVectorizer(sparse=False)
rf = RandomForestClassifier(n_estimators = 100)
trainFeatures1 = vec.fit_transform(trainFeatures)

# Fit the training data to the training output and create the decision trees
rf = rf.fit(trainFeatures1.toarray(), LabelEncoder().fit_transform(trainLabels))

testFeatures1 = vec.fit_transform(testFeatures)
# Take the same decision trees and run on the test data
Output = rf.score(testFeatures1.toarray(), LabelEncoder().fit_transform(testLabels))

print "accuracy: " + str(Output)
Run Code Online (Sandbox Code Playgroud)

我的问题是该fit_transform方法正在处理火车数据集,其中包含大约8000个实例,但是当我尝试将我的测试集转换为数字特征时,也就是大约80000个实例,我得到一个内存错误,说:

testFeatures1 = vec.fit_transform(testFeatures)
File …
Run Code Online (Sandbox Code Playgroud)

classification machine-learning random-forest scikit-learn text-classification

13
推荐指数
1
解决办法
9204
查看次数

R:如何使用randomForest的长向量?

R 3.0.0的一个新特性是引入了长向量.但是,.C()和.Fortran()不接受长矢量输入.在R-bloggers上我发现:

这是一种预防措施,因为现有代码不太可能被编写来处理长向量(并且R包装器通常假设长度(x)是整数)

我使用R-package randomForest,这个包显然需要.Fortran(),因为它崩溃了,留下了错误信息

randomForest.default出错:.Fortran不支持long向量(参数20)

如何克服这个问题?我在Windows 7 64位计算机上使用randomForest 4.6-7(在R 3.0.2下构建).

r vector random-forest

13
推荐指数
1
解决办法
2460
查看次数

火花随机森林:同一种子的不同结果

当运行Spark的RandomForest算法时,即使使用相同的种子,我似乎在不同的运行中在树中获得不同的分割.任何人都可以解释我是否做错了(可能),或者实施是错误的(我认为不太可能)?这是我的运行方案:

//read data into rdd
//convert string rdd to LabeledPoint rdd
// train_LP_RDD is RDD of LabeledPoint
// call random forest
val seed = 123417
val numTrees = 10
val numClasses = 2
val categoricalFeaturesInfo: Map[Int, Int] = Map() 
val featureSubsetStrategy = "auto"
val impurity = "gini"
val maxDepth = 8
val maxBins = 10
val rfmodel = RandomForest.trainClassifier(train_LP_RDD, numClasses, categoricalFeaturesInfo,
                        numTrees, featureSubsetStrategy, impurity, maxDepth, maxBins,seed)
println(rfmodel.toDebugString)
Run Code Online (Sandbox Code Playgroud)

在两个不同的运行中,此代码段的输出是不同的.例如,两个结果的差异显示如下:

sdiff -bBWs run1.debug run2.debug

If (feature 2 <= 15.96)             |         If (feature …
Run Code Online (Sandbox Code Playgroud)

scala machine-learning random-forest apache-spark

13
推荐指数
1
解决办法
601
查看次数

sklearn.ensemble.RandomForestClassifier中的邻近矩阵

我正在尝试使用随机森林在Python中执行聚类.在随机森林的R实现中,您可以设置一个标记来获取邻近矩阵.我似乎无法在随机森林的python scikit版本中找到类似的东西.有谁知道python版本是否有相同的计算?

python random-forest scikit-learn

12
推荐指数
2
解决办法
3817
查看次数

如何从Python Scikit-learn中的随机森林中的每棵树输出回归预测?

我是scikit-learn和随机森林回归的新手,并且想知道除了组合预测之外,是否有一种简单的方法可以从随机森林中的每棵树中获得预测.我想在列表中输出所有预测而不是查看整个树.我知道我可以使用apply方法获取叶子索引,但我不知道如何使用它来从叶子中获取值.任何帮助表示赞赏.

编辑:以下是我迄今为止的评论.之前我不清楚是否可以调用estimators_属性中的树,但似乎可以使用该属性在每个树上使用预测方法.这是最好的方法吗?

numberTrees = 100
clf = RandomForestRegressor(n_estimators=numberTrees)
clf.fit(X,Y)
for tree in range(numberTrees):
    print(clf.estimators_[tree].predict(val.irow(1)))
Run Code Online (Sandbox Code Playgroud)

python regression random-forest scikit-learn

12
推荐指数
1
解决办法
6199
查看次数

randomForest和long向量的问题

我在一个包含8个数字列(预测变量)和1个因子(结果)的数据集上运行随机林.数据集中有1.2M行.当我做:

randomForest(outcome.f ~ a + b + c + d + e + f + g + h,data=mdata)),我收到一个错误:

"Error in randomForest.default(m, y, ...) : 
 long vectors (argument 26) are not supported in .Fortran"
Run Code Online (Sandbox Code Playgroud)

有什么方法可以防止这种情况吗?我不明白为什么包(显然)试图分配长度为2 ^ 31-1的向量.我使用的是Mac OS X 10.9.2,带有Intel Core i7(如果架构很重要).

会话信息

R version 3.1.0 (2014-04-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] randomForest_4.6-7

loaded via a namespace (and not attached):
[1] tools_3.1.0
Run Code Online (Sandbox Code Playgroud)

r random-forest

12
推荐指数
1
解决办法
4887
查看次数

为sklearn算法选择random_state

据我所知,random_state在各种sklearn算法中使用它来打破具有相同度量值的不同预测变量(树)之间的联系(例如在中GradientBoosting).但是文档没有澄清或详细说明.喜欢

1)这些种子用于随机数生成的其他地方?比如说RandomForestClassifier,随机数可用于查找一组随机特征来构建预测器.使用子采样的算法可以使用随机数来获得不同的子样本.可以/是同一种子(random_state)在多个随机数生成中扮演一个角色吗?

我主要关心的是

2)这个random_state变量的影响有多远.?这个值能否在预测(分类或回归)方面产生很大的不同.如果是,我应该关注哪种数据集?或者更多的是关于稳定性而不是结果的质量?

3)如果它可以产生很大的不同,如何最好地选择random_state?没有直觉,很难做GridSearch.特别是如果数据集是这样的,一个CV可能需要一个小时.

4)如果动机只是在重复运行中只有稳定的结果/评估我的模型和交叉验证分数,如果我random.seed(X)在使用任何算法之前设置(并使用random_state无),它是否具有相同的效果.

5)假设我random_state在GradientBoosted分类器上使用了一个值,并且我正在交叉验证以找到我的模型的优点(每次都在验证集上得分).一旦满意,我将在整个训练集上训练我的模型,然后将其应用于测试集.现在,完整的训练集比交叉验证中的较小训练集具有更多的实例.因此,random_state与cv循环中发生的情况相比,该值现在可以导致完全不同的行为(特征和个体预测变量的选择).类似于像样本叶子等的事情也可能导致较差的模型,因为设置是CV中的实例数,而实际的实例数更多.这是正确的理解吗?防范这种情况的方法是什么?

machine-learning random-forest scikit-learn

12
推荐指数
1
解决办法
5844
查看次数

游侠的重要性

我用caret+ 训练了一个随机森林ranger.

fit <- train(
    y ~ x1 + x2
    ,data = total_set
    ,method = "ranger"
    ,trControl = trainControl(method="cv", number = 5, allowParallel = TRUE, verbose = TRUE)
    ,tuneGrid = expand.grid(mtry = c(4,5,6))
    ,importance = 'impurity'
)
Run Code Online (Sandbox Code Playgroud)

现在我想看看变量的重要性.但是,这些都不起作用:

> importance(fit)
Error in UseMethod("importance") : no applicable method for 'importance' applied to an object of class "c('train', 'train.formula')"
> fit$variable.importance
NULL
> fit$importance
NULL

> fit
Random Forest 

217380 samples
    32 predictors

No pre-processing
Resampling: Cross-Validated (5 …
Run Code Online (Sandbox Code Playgroud)

r machine-learning random-forest r-caret

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

如何理解RandomForestExplainer输出(R包)

我有以下代码,它基本上尝试使用randomForest预测Species来自iris数据.我真正想要的是找到解释物种分类的最佳特征(变量).我发现包randomForestExplainer是最好的服务目的.

library(randomForest)
library(randomForestExplainer)
forest <- randomForest::randomForest(Species ~ ., data = iris, localImp = TRUE)
importance_frame <- randomForestExplainer::measure_importance(forest)
randomForestExplainer::plot_multi_way_importance(importance_frame, size_measure = "no_of_nodes")
Run Code Online (Sandbox Code Playgroud)

代码的结果产生了这个图:

在此输入图像描述

根据情节,解释为什么Petal.Length和Petal.Width是最佳因素的关键因素是这些(解释基于小插图):

  1. mean_min_depth - 以参数mean_sample指定的三种方式之一计算的平均最小深度,
  2. times_a_root - 使用Xj分割根节点的树的总数(即,基于Xj的值将整个样本分成两个),
  3. no_of_nodes - 使用Xj进行拆分的节点总数(如果树浅,通常等于no_of_trees),

我不清楚为什么高times_a_root而且no_of_nodes更好?低价mean_min_depth更好?

有什么直观的解释?

小品信息不能帮助.

r machine-learning random-forest

12
推荐指数
1
解决办法
281
查看次数