随机森林参数说明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机森林参数说明相关的知识,希望对你有一定的参考价值。
参考技术A 最主要的两个参数是n_estimators和max_features。理论上是越大越好,但是计算时间也相应增长。所以,并不是取得越大就会越好,预测效果最好的将会出现在合理的树个数。
每个决策树在随机选择的这max_features特征里找到某个“最佳”特征,使得模型在该特征的某个值上分裂之后得到的收益最大化。max_features越少,方差就会减少,但同时偏差就会增加。
如果是回归问题,则max_features=n_features,如果是分类问题,则max_features=sqrt(n_features),其中,n_features 是输入特征数。
1.回归问题的应用场景(预测的结果是连续的,例如预测明天的温度,23,24,25度)
回归问题通常是用来预测一个值 ,如预测房价、未来的天气情况等等,例如一个产品的实际价格为500元,通过回归分析预测值为499元,我们认为这是一个比较好的回归分析。一个比较常见的回归算法是线性回归算法(LR)。另外,回归分析用在神经网络上,其最上层是不需要加上softmax函数的,而是直接对前一层累加即可。回归是对真实值的一种逼近预测。
2.分类问题的应用场景(预测的结果是离散的,例如预测明天天气-阴,晴,雨)
分类问题是用于将事物打上一个标签,通常结果为离散值。 例如判断一幅图片上的动物是一只猫还是一只狗,分类通常是建立在回归之上,分类的最后一层通常要使用softmax函数进行判断其所属类别。分类并没有逼近的概念,最终正确结果只有一个,错误的就是错误的,不会有相近的概念。最常见的分类方法是逻辑回归,或者叫逻辑分类。
其他参数:
如果max_depth=None,节点会拟合到增益为0,或者所有的叶节点含有小于min_samples_split个样本。如果同时min_sample_split=1, 决策树会拟合得很深,甚至会过拟合。
如果bootstrap==True,将每次有放回地随机选取样本。
只有在extra-trees中,bootstrap=False。
1、随机森林应用的是Bagging模型,而ET是使用所有的训练样本得到每棵决策树,也就是每棵决策树应用的是相同的全部训练样本;
2、随机森林是在一个随机子集内得到最佳分叉属性,而ET是完全随机的得到分叉值,从而实现对决策树进行分叉的。
训练随机森林时,建议使用cross_validated(交叉验证),把数据n等份,每次取其中一份当验证集,其余数据训练随机森林,并用于预测测试集。最终得到n个结果,并平均得到最终结果。
1. 随机森林算法几乎不需要输入的准备。它们不需要测算就能够处理二分特征、分类特征、数值特征的数据。随机森林算法能完成隐含特征的选择,并且提供一个很好的特征重要度的选择指标。
2. 随机森林算法训练速度快。性能优化过程刚好又提高了模型的准确性,这种精彩表现并不常有,反之亦然。这种旨在多样化子树的子设定随机特征,同时也是一种突出的性能优化!调低给定任意节点的特征划分,能让你简单的处理带有上千属性的数据集。(如果数据集有很多行的话,这种方法同样的也可以适用于行采样)
3. 随机森林算法很难被打败。针对任何给定的数据集,尽管你常能找到一个优于它的模型(比较典型的是神经网络或者一些增益算法 boosting algorithm),但这类算法肯定不多,而且通常建这样的模型并调试好要比随机森林算法模型要耗时的更多。这也是为何随机森林算法作为基准模型表现出色的原因。
4. 建立一个差劲的随机森林模型真的很难!因为随机森林算法对指定使用的超参数(hyper-parameters )并不十分敏感。为了要得到一个合适的模型,它们不需要做很多调整。只需使用大量的树,模型就不会产生很多偏差。大多数的随机森林算法的实现方法的参数设置初始值也都是合理的。
5. 通用性。随机森林算法可以应用于很多类别的模型任务。它们可以很好的处理回归问题,也能对分类问题应付自如(甚至可以产生合适的标准概率值)。虽然我从没亲自尝试,但它们还可以用于聚类 分析问题。
————————————————
原文链接:https://blog.csdn.net/jiede1/article/details/78245597
原文链接:https://blog.csdn.net/rosefun96/article/details/78833477
随机森林中的 tuneGrid 参数问题
【中文标题】随机森林中的 tuneGrid 参数问题【英文标题】:Issues with tuneGrid parameter in random forest 【发布时间】:2015-01-08 19:05:11 【问题描述】:我一直在处理一些极其不平衡的数据,我想使用分层抽样来创建更平衡的随机森林
现在,我正在使用 caret 包,主要用于调整随机森林。 所以我尝试设置一个 tuneGrid 将 mtry 和 sampsize 参数传递到 caret train 方法中,如下所示。
mtryGrid <- data.frame(.mtry = 100),.sampsize=80)
rfTune<- train(x = trainX,
y = trainY,
method = "rf",
trControl = ctrl,
metric = "Kappa",
ntree = 1000,
tuneGrid = mtryGrid,
importance = TRUE)
当我运行这个例子时,我得到以下错误
The tuning parameter grid should have columns mtry
我遇到过像this 这样的讨论,建议应该可以传入这些参数。
另一方面,这个page表明唯一可以传入的参数是mtry
我什至可以通过插入符号将 sampsize 传入随机森林吗?
【问题讨论】:
【参考方案1】:您的mtryGrid
似乎存在括号问题。或者,您也可以使用expand.grid
给出您想尝试的mtry
的不同值。
默认情况下,您可以为随机森林调整的唯一参数是mtry
。但是您仍然可以将其他参数传递给train
。但这些将有一个固定值,因此不会被train
调整。但是您仍然可以要求在train
中使用分层样本。下面是我的做法,假设 trainY
是一个布尔变量,您希望根据该变量对样本进行分层,并且您希望每个类别的样本大小为 80:
mtryGrid <- expand.grid(mtry = 100) # you can put different values for mtry
rfTune<- train(x = trainX,
y = trainY,
method = "rf",
trControl = ctrl,
metric = "Kappa",
ntree = 1000,
tuneGrid = mtryGrid,
strata = factor(trainY),
sampsize = c(80, 80),
importance = TRUE)
【讨论】:
出于某种原因,我认为无法将 sampsize 传递给 train()。那好吧。谢谢! @Garnieje,有什么好的资源可以了解您可以为每种方法调整哪些参数(例如,mtry
用于 rf
)?我在想我可以添加ntree
并遇到同样的问题......
没关系,I found it
@toto_tico 如果您不想通读文档:caret::modelLookup(model = "rf")
【参考方案2】:
我怀疑可以直接将sampsize
和strata
传递给train
。但是从here 我相信解决方案是使用trControl()
。也就是说,
mtryGrid <- data.frame(.mtry = 100),.sampsize=80)
rfTune<- train(x = trainX,
y = trainY,
method = "rf",
trControl = trainControl(sampling=X),
metric = "Kappa",
ntree = 1000,
tuneGrid = mtryGrid,
importance = TRUE)
其中X
可以是c("up","down","smote","rose")
之一。
【讨论】:
以上是关于随机森林参数说明的主要内容,如果未能解决你的问题,请参考以下文章
sklearn库学习----随机森林(RandomForestClassifier,RandomForestRegressor)