R中RandomForest包中的RandomForest函数中的参数'classwt'代表啥?
Posted
技术标签:
【中文标题】R中RandomForest包中的RandomForest函数中的参数\'classwt\'代表啥?【英文标题】:What does the parameter 'classwt' in RandomForest function in RandomForest package in R stand for?R中RandomForest包中的RandomForest函数中的参数'classwt'代表什么? 【发布时间】:2012-04-24 03:44:26 【问题描述】:randomforest::randomforest()
的帮助页面说:
“classwt - 类的先验值。不需要加起来。忽略回归。”
当您有大量不平衡数据时,可以设置classwt
参数帮助,即。类的先验差异很大?
当在具有 3 个类且先验向量等于 (p1,p2,p3) 的数据集上训练模型时,我应该如何设置 classwt
,并且在测试集中先验是 (q1,q2,q3)?
【问题讨论】:
我不确定你的第二个问题,但classwt
我相信在从你的数据中采样时使用,这样每棵树的每个样本都是从具有这些概率的类中抽取的(在标准化之后)。
strata 产生与 classwt 相同的性能并且更易于控制,请查看此指南:stats.stackexchange.com/questions/157714/…
@joran 这是你所描述的分层。 Classwt 用于在寻找节点分裂的最佳断点时对样本进行加权,并在训练期间定义节点预测。
愿我的老 cmets 四年后也困扰着我 :)
【参考方案1】:
当您有大量不平衡数据时设置 classwt 参数是否有帮助 - 类的先验差异很大?
是的,设置 classwt 的值对于不平衡的数据集可能很有用。我同意 joran 的观点,即这些值在采样训练数据的概率中进行了转换(根据 Breiman 在其原始文章中的论点)。
在具有 3 个类的训练数据集中,您的先验向量等于 (p1,p2,p3),而在测试集中的先验向量为 (q1,q2,q3),如何设置 classwt?
对于培训,您可以简单地指定
rf <- randomForest(x=x, y=y, classwt=c(p1,p2,p3))
对于测试集,不能使用先验:1)在randomForest包的predict
方法中没有这样的选项; 2) 权重只对模型的训练有意义,对预测没有意义。
【讨论】:
据我了解,先验 (p1,p2,p3) 是一般人群的特征,而不是特定的训练数据集。如果我想预测测试数据集中的类,并且我知道集合中的类概率是 (q1,q2,q3) 而不是设置 classwt=c(q1,q2,q3) 应该有助于随机森林以更好的方式探索训练空间. 不,这些类权重仅针对训练集。例如,如果你有平衡的训练集,一般不需要使用classwt
参数。但同时你可能会有不平衡的测试集,我希望在这种情况下改变类权重不会改善测试集的预测。换句话说,使用classwt
,您可以提高其中一个类别的预测准确度,同时降低另一个类别的预测准确度。例如,您可以稍微使用此参数并查看 OOB 集预测统计信息。以上是关于R中RandomForest包中的RandomForest函数中的参数'classwt'代表啥?的主要内容,如果未能解决你的问题,请参考以下文章
R 中 h2o 包中的 predict.H2OModel() 是不是为 h2o.randomForest() 模型提供 OOB 预测?
在 randomForest 包中绘制 500 棵树中的一棵
在 R 的 randomForest 包中,因子是不是必须明确标记为因子?