天道酬勤,学无止境

随机森林引导训练和森林生成(Random forest bootstrap training and forest generation)

问题

我有大量的随机森林训练数据(dim:47600811*9)。 我想取多个(假设为 1000 个)维度为 10000*9 的自举样本(每次运行取 9000 个负类和 1000 个正类数据点)并为所有这些树迭代生成树,然后将所有这些树组合成 1 个森林。 下面给出了所需代码的粗略概念。 有人可以指导我如何从我的实际 trainData 中生成带有替换的随机样本并以迭代方式为它们优化生成树吗? 这将是很大的帮助。 谢谢

library(doSNOW)
library(randomForest)
cl <- makeCluster(8)
registerDoSNOW(cl)

for (i=1:1000){
B <- 1000 
U <- 9000 
dataB <- trainData[sample(which(trainData$class == "B"), B,replace=TRUE),] 
dataU <- trainData[sample(which(trainData$class == "U"), U,replace=TRUE),] 
subset <- rbind(dataB, dataU)

我不确定这是否是从实际 trainData 一次又一次(1000 次)生成子集的最佳方式。

rf <- foreach(ntree=rep(125, 8), .packages='randomForest') %dopar% {
  randomForest(subset[,-1], subset$class, ntree=ntree)
}
}
crf <- do.call('combine', rf)
print(crf)
stopCluster(cl)
回答1

尽管您的示例并行化了内部循环而不是外部循环,但只要内部 foreach 循环的执行时间超过几秒钟,它就可以正常工作,这几乎可以肯定。 但是,您的程序确实有一个错误:它丢弃了前 999 个 foreach 结果而只处理最后一个结果。 要解决此问题,您可以预先分配一个长度为 1000*8 的列表,并在外部 for 循环的每次迭代中将 foreach 的结果分配给它。 例如:

library(doSNOW)
library(randomForest)
trainData <- data.frame(a=rnorm(20), b=rnorm(20),
                        class=c(rep("U", 10), rep("B", 10)))
n <- 1000         # outer loop count
chunksize <- 125  # value of ntree used in inner loop
nw <- 8           # number of cluster workers
cl <- makeCluster(nw)
registerDoSNOW(cl)
rf <- vector('list', n * nw)
for (i in 1:n) {
  B <- 1000
  U <- 9000
  dataB <- trainData[sample(which(trainData$class == "B"), B,replace=TRUE),]
  dataU <- trainData[sample(which(trainData$class == "U"), U,replace=TRUE),]
  subset <- rbind(dataB, dataU)
  ix <- seq((i-1) * nw + 1, i * nw)
  rf[ix] <- foreach(ntree=rep(chunksize, nw),
                    .packages='randomForest') %dopar% {
    randomForest(subset[,-1], subset$class, ntree=ntree)
  }
}
cat(sprintf("# models: %d; expected # models: %d\n", length(rf), n * nw))
cat(sprintf("expected total # trees: %d\n", n * nw * chunksize))
crf <- do.call('combine', rf)
print(crf)

这应该可以解决您在给我的评论中提到的问题。

回答2

像这样的东西会起作用

# Replicate expression 1000 times, store output of each replication in a list
# Find indices of class B and sample 9000 times with replacement
# Do the same 1000 times for class U. Combine the two vectors of indices

i = replicate(1000, {c(sample(which(trainData$class == "B"), 9000, replace = T), sample(which(trainData$class == "U"), 1000, replace = T))})

然后将i输入到 lapply 的并行版本中

mclapply(i, function(i, ntree) randomForest(trainData[i,-1], trainData[i,]$class, ntree=ntree)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • SciKit-Learn 随机森林子样本大小如何可能等于原始训练数据大小?(How can SciKit-Learn Random Forest sub sample size may be equal to original training data size?)
    问题 在 SciKit-Learn 随机森林分类器的文档中,指出 子样本大小始终与原始输入样本大小相同,但如果 bootstrap=True(默认值),则样本会替换绘制。 我不明白的是,如果样本量始终与输入样本量相同,那么我们如何谈论随机选择。 这里没有选择,因为我们在每次训练中使用所有(自然是相同的)样本。 我在这里错过了什么吗? 回答1 我相信这部分文档可以回答您的问题 在随机森林中(参见 RandomForestClassifier 和 RandomForestRegressor 类),集成中的每棵树都是从训练集的替换样本(即引导样本)中提取的。 此外,在构建树的过程中分割节点时,选择的分割不再是所有特征中最好的分割。 相反,选择的分割是特征的随机子集之间的最佳分割。 由于这种随机性,森林的偏差通常会略有增加(相对于单个非随机树的偏差),但由于平均,其方差也会减少,通常超过补偿偏差的增加,因此产生了一个整体更好的模型。 理解的关键在于“替换抽取的样本”。 这意味着可以多次绘制每个实例。 这反过来意味着,训练集中的某些实例多次出现,而有些则根本不存在(out-of-bag)。 对于不同的树,这些是不同的 回答2 当然,并不是每棵树都选择了所有样本。 默认情况下,每个样本有 1-((N-1)/N)^N~0.63 被采样一棵树的机会,0.63^2 被采样两次,0.63^3 被采样
  • 插入符号:使用随机森林并包括交叉验证(caret: using random forest and include cross-validation)
    问题 我使用 caret 包来训练随机森林,包括重复的交叉验证。 我想知道是否使用了 OOB,如 Breiman 的原始 RF 中那样,或者这是否被交叉验证所取代。 如果被替换,我是否具有与 Breiman 2001 中描述的相同的优点,例如通过减少输入数据之间的相关性来提高准确性? 由于 OOB 是带替换绘制的,而 CV 是不带替换绘制的,这两种程序是否具有可比性? 错误率的 OOB 估计是多少(基于 CV)? 树是怎么长出来的? 是否使用 CART? 由于这是我的第一个线程,如果您需要更多详细信息,请告诉我。 提前谢谢了。 回答1 这里有很多基本问题,你最好阅读一本关于机器学习或预测建模的书。 这可能就是你没有得到太多回应的原因。 对于caret您还应该咨询包网站,其中一些问题已得到解答。 以下是一些注意事项: RF 的 CV 和 OOB 估计有些不同。 这篇文章可能有助于解释如何。 对于此应用程序,在构建模型时计算来自随机森林的 OOB 率,而 CV 使用在计算随机森林模型后预测的保持样本。 原始随机森林模型(此处使用)使用未修剪的 CART 树。 同样,这在许多教科书和论文中都有。 最大限度 回答2 我最近对此也有点困惑,但阅读 Max Kuhn 的 Applied Predictive Modeling 第 4 章帮助我理解了其中的区别。 如果您在 R 中使用
  • 为什么带有一棵树的随机森林比决策树分类器好得多?(Why is Random Forest with a single tree much better than a Decision Tree classifier?)
    问题 我通过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) 为什么随机森林分类器的结果要好得多(对于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
  • 在 scikit-learn python 中使用 bootstrap = False 的随机森林(Random Forest with bootstrap = False in scikit-learn python)
    问题 如果我们选择 bootstrap = False,RandomForestClassifier() 会做什么? 根据此链接中的定义 http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier bootstrap : boolean, optional (default=True) 构建树时是否使用 bootstrap 样本。 问这个是因为我想对时间序列使用随机森林方法,所以使用大小为 (tn) 的滚动窗口进行训练并预测日期 (t+k) 并想知道如果我们选择 True 或错误的: 1) 如果Bootstrap = True ,那么当训练样本可以是任何一天和任意数量的特征时。 因此,例如可以有来自第 (t-15) 天、第 (t-19) 天和第 (t-35) 天的样本,每个样本都具有随机选择的特征,然后预测日期 (t+1) 的输出。 2)如果Bootstrap = False ,它将使用从日期 (tn) 到 t 的所有样本和所有特征进行训练,因此它实际上会尊重日期顺序(意味着它将使用 t-35, t- 34、t-33...等直到 t-1)。 然后将预测日期(t + 1)的输出。
  • 随机森林回归中的样本大小(Size of sample in Random Forest Regression)
    问题 如果理解正确,当计算随机森林估计量时,通常会应用引导程序,这意味着树(i)仅使用来自样本(i)的数据构建,并选择替换。 我想知道 sklearn RandomForestRegressor 使用的样本大小是多少。 我看到的唯一接近的是: bootstrap : boolean, optional (default=True) Whether bootstrap samples are used when building trees. 但是没有办法指定样本量的大小或比例,也没有告诉我默认的样本量。 我觉得应该有办法至少知道默认样本量是多少,我错过了什么? 回答1 bootstrap 的样本大小始终是样本数。 您没有遗漏任何东西,在RandomForestClassifier的邮件列表中提出了同样的问题: 引导样本大小始终与输入样本大小相同。 如果您愿意,可能会非常欢迎更新文档的拉取请求。 回答2 呃,我同意你的看法,很奇怪我们不能在RandomForestRegressor算法中指定子样本/引导程序大小。 也许一个潜在的解决方法是改用BaggingRegressor 。 http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingRegressor.html#sklearn.ensemble
  • sklearn 随机森林:.oob_score_ 太低?(sklearn random forest: .oob_score_ too low?)
    问题 我正在寻找随机森林的应用程序,我在 Kaggle 上发现了以下知识竞赛: https://www.kaggle.com/c/forest-cover-type-prediction。 遵循以下建议 https://www.kaggle.com/c/forest-cover-type-prediction/forums/t/8182/first-try-with-random-forests-scikit-learn, 我使用sklearn构建了一个有 500 棵树的随机森林。 .oob_score_为 ~2%,但保留集的得分为 ~75%。 只有七类要分类,所以 2% 真的很低。 当我交叉验证时,我的分数也一直接近 75%。 谁能解释.oob_score_和坚持/交叉验证分数之间的差异? 我希望它们是相似的。 这里有一个类似的问题: https://stats.stackexchange.com/questions/95818/what-is-a-good-oob-score-for-random-forests 编辑:我认为这也可能是一个错误。 该代码由我发布的第二个链接中的原始海报提供。 唯一的变化是在构建随机森林时必须设置oob_score = True 。 我没有保存我所做的交叉验证测试,但如果人们需要查看它,我可以重做。 回答1 问:谁能解释一下这种差异... 答:
  • [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林
    本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来解释 集成学习。并且用水浒传为例学习。并且从名著中延伸了具体应用场景来帮助大家深入这个概念。[白话解析] 通俗解析集成学习之bagging,boosting & 随机森林0x00 摘要本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来解释 集成学习。并且从名著中延伸了具体应用场景来帮助大家深入这个概念。在机器学习过程中,会遇到很多晦涩的概念,相关数学公式很多,大家理解起来很有困难。遇到类似情况,我们应该多从直觉角度入手思考,用类比或者举例来附会,这样往往会有更好的效果。我在讲解论述过程中给自己的要求是:在生活中或者名著中找一个例子,然后用自己的话语阐述出来。0x01 相关概念1. 偏置( bias ) vs 方差( variance )平方偏置( bias ),表示所有数据集的平均预测与预期的回归函数之间的差异。方差( variance ),度量了对于单独的数据集,模型所给出的解在平均值附近波动的情况,方差 度量了同样大小的训练集的变动所导致的学习性能的变化,度量了在面对同样规模的不同训练集时,学习算法的估计结果发生变动的程度(相关于观测样本的误差,刻画了一个学习算法的精确性和特定性:一个高的方差意味着一个弱的匹配)
  • day3 机器学习 sklearn学习 集成算法-随机森林
    # todo: 集成算法模块 集成学习 ensemble # 决策树非常容易 过拟合:在训练集上表现优秀,却在测试集上表现糟糕,一般用剪枝 # 目前最受欢迎的集成算法GBDT # todo:三类集成算法: # ·装袋法(Bagging):构建多个相互独立的评估器,然后对其预测进行平均或多数表决原则来决定集成评估器的结果。装袋法的代表模型就是随机森林 # ·提升法(Boosting) :基评估器是相关的,是按顺序一一构建的。其核心思想是结合弱评估器的力量一次次对难以评估的样本进行预测,从而构成一个强评估器。提升法的代表模型有Adaboost和梯度提升树 # ·stacking # todo: # 类 类的功能 # ensemble.AdaBoostClassifier AdaBoost分类 # ensemble.AdaBoostRegressor Adaboost回归 # ensemble.BaggingClassifier 装袋分类器 # ensemble.BaggingRegressor 装袋回归器 # ensemble.ExtraTreesClassifier Extra-trees分类(超树,极端随机树) # ensemble.ExtraTreesRegressor Extra-trees回归 # ensemble.GradientBoostingClassifier
  • 04-11 随机森林代码(葡萄酒质量检测)
    目录随机森林代码(葡萄酒质量检测)一、导入模块二、导入数据三、数据预处理四、训练模型五、度量模型更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html随机森林代码(葡萄酒质量检测)一、导入模块import pandas as pd from sklearn import datasets from sklearn.preprocessing import LabelEncoder from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score二、导入数据X, y = datasets.load_wine(return_X_y=True)三、数据预处理le = LabelEncoder() # 把label转换为0和1 y = le.fit_transform(y) # 训练集和测试集比例为7:3 X_train, X_test, y_train, y_test = train_test_split( X
  • 易懂:决策树与随机森林
    相关知识铺垫 信息熵的定义:在物理界中,熵是描述事物无序性的参数,熵越大则越混乱;而信息熵是信息论中用于度量信息量的一个概念。一个系统越是有序,信息熵就越低;一个系统越是混乱,信息熵就越高,所以,信息熵也可以说是系统有序化程度的一个度量。信息熵的公式: 也可以理解为:H(x) = -(p1logp1 + p2logp2 + … + p32logp32)信息熵公式案例:在不知道任何有关信息不知道的情况下:在32个比赛用马(样本)中猜出一个编号为获胜者(目标值)的信息熵计算:H(X) = -(1/32log1/32+1/32log1/32+…+1/32*log1/32) =log32 = 5 这里的5代表了:1、按照二分法最多5次就能猜中获胜马的编号;2(重要)、该事务此时的总的信息熵为5。如果此时我们知道了这些马的一个特征:马的血统,那么通过相关计算(具体参考下面一个详细的计算案例)就会发现该事物的总的信息熵会被减少,那么此时便可以引出信息增益的概念。 信息增益:当得知数据集中某一个特征条件之后,减少的信息熵的大小度量。信息增益公式: g(D,A)=H(D)-H(D|A) 。 g(D,A):指的是信息增益;H(D):指的是目标值的信息熵的大小;H(D|A):条件熵的大小(条件熵是指:知道某个特征后总的信息熵的值)。H(D)和H(D|A)计算公式如下: 为了更好的理解这个信息增益公式
  • 使用公式界面时出现问题的随机森林训练运行时(Problematic Random Forest training runtime when using formula interface)
    问题 运行来自 http://www.kaggle.com/c/icdar2013-gender-prediction-from-handwriting/data 的随机森林示例,以下行: forest_model <- randomForest(as.factor(male) ~ ., data=train, ntree=10000) 需要几个小时(不确定它是否会结束,但这个过程似乎确实有效)。 数据集有 1128 行和约 7000 个变量。 是否可以估计随机森林训练何时结束? 我可以以某种方式分析 R 以获取更多信息吗? 回答1 一种想法,控制收敛是使用do.trace进行详细模式 iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE, + proximity=TRUE,do.trace=TRUE) ntree OOB 1 2 3 1: 8.62% 0.00% 9.52% 15.00% 2: 5.49% 0.00% 3.45% 13.79% 3: 5.45% 0.00% 5.41% 11.76% 4: 4.72% 0.00% 4.88% 9.30% 5: 5.11% 0.00% 6.52% 8.89% 6: 5.56% 2.08% 6.25% 8.33% 7: 4.76% 0.00% 6.12% 8.16
  • R 中的随机森林是否有训练数据大小的限制?(Does random forest in R have a limitation of size of training data?)
    问题 我正在对具有 114954 行和 135 列(预测变量)的训练数据训练随机森林。 我收到以下错误。 model <- randomForest(u_b_stars~. ,data=traindata,importance=TRUE,do.trace=100, keep.forest=TRUE, mtry=30) Error: cannot allocate vector of size 877.0 Mb In addition: Warning messages: 1: In randomForest.default(m, y, ...) : The response has five or fewer unique values. Are you sure you want to do regression? 2: In matrix(double(nrnodes * nt), ncol = nt) : Reached total allocation of 3958Mb: see help(memory.size) 3: In matrix(double(nrnodes * nt), ncol = nt) : Reached total allocation of 3958Mb: see help(memory.size) 4: In matrix(double
  • 在R中结合使用不同训练集构建的随机森林(Combining random forests built with different training sets in R)
    问题 我是R(第2天)的新手,并受过建立随机森林的任务。 每个单独的随机森林将使用不同的训练集进行构建,我们将在最后结合所有森林进行预测。 我正在R中实现它,并且在合并两个未使用同一集合构建的林时遇到一些困难。 我的尝试如下: d1 = read.csv("../data/rr/train/10/chunk0.csv",header=TRUE) d2 = read.csv("../data/rr/train/10/chunk1.csv",header=TRUE) rf1 = randomForest(A55~., data=d1, ntree=10) rf2 = randomForest(A55~., data=d2, ntree=10) rf = combine(rf1,rf2) 当然,这会产生一个错误: Error in rf$votes + ifelse(is.na(rflist[[i]]$votes), 0, rflist[[i]]$votes) : non-conformable arrays In addition: Warning message: In rf$oob.times + rflist[[i]]$oob.times : longer object length is not a multiple of shorter object length
  • 决策树Decision Tree 和随机森林RandomForest基本概念(一)
    文章目录 一、决策树介绍1.1 什么是决策树1.2 决策树种类1.3 决策树学习过程1.4 Entropy(熵)1.5 information gain(信息增益)1.6 信息论1.8 Gini系数1.9 bagging method 和 random forests1.10 剪枝算法1.11 每个节点的位置如何确定?1.12 每个节点在哪个值上做划分,确定分支结构呢?1.13 信息增益 vs 信息增益比1.13 Gini 指数 vs 熵 二、决策树算法2.0 决策树算法Hunt2.1 ID32.2 C4.52.2 C5.02.3 CART2.4 CART与ID3和C4.5的区别2.5 决策树与这些算法框架进行结合所得到的新的算法:2.6 ID3,C4.5决策树的生成 三、决策树优缺点3.1 优点3.2 缺点 四 随机森林基础概念4.1 随机森林介绍4.2 随机森林的生成过程4.3 随机森林的评价指标--袋外误差(oob error)4.4 随机森林的特点 五、Bagging和Boosting的概念与区别5.1 Bagging算法(套袋法):5.2 Boosting(提升法)5.3 Bagging,Boosting的主要区别 有趣的事,Python永远不会缺席证书说明 一、决策树介绍 1.1 什么是决策树   类决策树模型是一种描述对实例进行分类的树形结构
  • 随机森林模型中预测结果的差异(Difference of prediction results in random forest model)
    问题 我建立了一个随机森林模型,当我编写两行不同的代码以生成预测时,我得到了两个不同的预测结果。 我不知道哪一个是正确的。 这是我的示例数据框和usedcode: dat <- read.table(text = " cats birds wolfs snakes 0 3 9 7 1 3 8 4 1 1 2 8 0 1 2 3 0 1 8 3 1 6 1 2 0 6 7 1 1 6 1 5 0 5 9 7 1 3 8 7 1 4 2 7 0 1 2 3 0 7 6 3 1 6 1 1 0 6 3 9 1 6 1 1 ",header = TRUE) 我建立了一个随机森林模型: model<-randomForest(snakes~cats+birds+wolfs,data=dat,ntree=20) RF_pred<- data.frame(predict(model)) train<-cbind(train,RF_pred) # this gave me a predictive results named: "predict.model." 出于好奇,我尝试了以下代码使用另一种语法: dat$RF_pred<-predict(model,newdata=dat,type='response') # this gave me a predictive results named
  • 组合随机森林树时出现意外异常(Unexpected exception when combining random forest trees)
    问题 使用这个问题中描述的信息,在 scikit learn 中结合随机森林模型,我尝试使用 python2.7.10 和 sklearn 0.16.1 将几个随机森林分类器组合成一个分类器,但在某些情况下会出现此异常: Traceback (most recent call last): File "sktest.py", line 50, in <module> predict(rf) File "sktest.py", line 46, in predict Y = rf.predict(X) File "/python-2.7.10/lib/python2.7/site-packages/sklearn/ensemble/forest.py", line 462, in predict proba = self.predict_proba(X) File "/python-2.7.10/lib/python2.7/site-packages/sklearn/ensemble/forest.py", line 520, in predict_proba proba += all_proba[j] ValueError: non-broadcastable output operand with shape (39,1) doesn't match the broadcast
  • 04-10 Bagging和随机森林
    目录Bagging算法和随机森林一、Bagging算法和随机森林学习目标二、Bagging算法原理回顾三、Bagging算法流程3.1 输入3.2 输出3.3 流程四、随机森林详解4.1 随机森林和Bagging算法区别五、随机森林拓展5.1 Extra Trees5.2 Totally Random Trees Embedding5.3 Isolation Forest六、随机森林流程6.1 输入6.2 输出6.3 流程七、随机森林优缺点7.1 优点7.2 缺点八、小结Bagging算法和随机森林集成学习主要分成两个流派,其中一个是Boosting算法,另一个则是本文要讲的Bagging算法,Bagging算法算法的弱学习器是没有依赖关系的,因此弱学习之间可以并行拟合。Bagging算法中最著名的算法是随机森林,由于随机森林的不容易过拟合性以及简便性,可以说是和梯度提升树同名的算法。一、Bagging算法和随机森林学习目标Bagging算法原理Bagging算法流程随机森林和Bagging算法区别随机森林流程二、Bagging算法原理回顾Bagging算法的弱学习器的训练集是通过随机采样得到的。通过\(T\)次的随机采样,我们可以通过自主采样法(bootstrap sampling)得到\(T\)个采样集,然后对于这\(T\)个采样集独立的训练出\(T\)个弱学习器
  • 使用 Scikit-Learn 在 Python 中为随机森林绘制树(Plot trees for a Random Forest in Python with Scikit-Learn)
    问题 我想绘制随机森林的决策树。 所以,我创建了以下代码: clf = RandomForestClassifier(n_estimators=100) import pydotplus import six from sklearn import tree dotfile = six.StringIO() i_tree = 0 for tree_in_forest in clf.estimators_: if (i_tree <1): tree.export_graphviz(tree_in_forest, out_file=dotfile) pydotplus.graph_from_dot_data(dotfile.getvalue()).write_png('dtree'+ str(i_tree) +'.png') i_tree = i_tree + 1 但它不会产生任何东西......你知道如何从随机森林中绘制决策树吗? 谢谢, 回答1 假设您的随机森林模型已经拟合,首先您应该首先导入export_graphviz函数: from sklearn.tree import export_graphviz 在您的 for 循环中,您可以执行以下操作来生成dot文件 export_graphviz(tree_in_forest, feature_names=X.columns
  • 谈谈模型融合之二 —— 随机森林
    上篇文章介绍了集成学习的相关概念以及基于 Boosting的 AdaBoost,这篇文章将介绍基于模型融合的另一种方式 Bagging 的算法,随机森林(Random Forest)。(上篇公式敲的太累了这篇就来个简单的缓解缓解) 2|0随机森林 2|1算法思想 我们先来看看这个算法的名字,可以拆分开为两部分,随机和森林。森林我们很容易可以想到,就是有很多棵树,即由多颗决策树组成。那么随机指的是什么呢?这里我们来看看 Bagging 的思想了。 首先先说说自助采样(Bootstrap Sanpling) 指任何一种有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。 而 Bagging 则是利用自助采样得到 T 组训练样本集,分别利用这些训练样本集训练 T 个分类器,最后进行集成的方法。从 Bias-Variance 分解的角度看, Bagging 主要关注降低方差。 那么,我们大概就能知道这个随机大概是什么意思了,就是随机抽取训练集。 那么,问题又来了,到底是随机抽取一定量的样本呢还是抽取部分特征呢?答案是都有,随机在这两方面都有所体现。 所以可以列出这么一个等式—— Random Forest = Bagging + Fully-Grown CART with Random Subspace。 其特点为: 可高度并行化继承了 CART
  • r随机森林错误-新数据中的预测变量类型不匹配(r random forest error - type of predictors in new data do not match)
    问题 我正在尝试在基于随机森林包构建的R(quantregForest)中使用分位数回归森林功能。 我收到一个类型不匹配错误,我不知道为什么。 我通过使用训练模型 qrf <- quantregForest(x = xtrain, y = ytrain) 可以正常工作,但是当我尝试使用新数据进行测试时 quant.newdata <- predict(qrf, newdata= xtest) 它给出以下错误: Error in predict.quantregForest(qrf, newdata = xtest) : Type of predictors in new data do not match types of the training data. 我的训练和测试数据来自单独的文件(因此具有单独的数据帧),但格式相同。 我已经检查了预测变量的类别 sapply(xtrain, class) sapply(xtest, class) 这是输出: > sapply(xtrain, class) pred1 pred2 pred3 pred4 pred5 pred6 pred7 pred8 "factor" "integer" "integer" "integer" "factor" "factor" "integer" "factor" pred9 pred10