gpt4 book ai didi

scikit-learn - sklearn 随机森林 : . oob_score_ 太低?

转载 作者:行者123 更新时间:2023-12-04 20:41:56 27 4
gpt4 key购买 nike

我正在寻找随机森林的应用程序,我在 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 当您构建随机森林时。

我没有保存我所做的交叉验证测试,但如果人们需要查看它,我可以重做。

最佳答案

问:谁能解释一下这种差异...
答: sklearn.ensemble.RandomForestClassifier 对象并观察到 ​​ .oob_score_ 属性值不是与错误相关的问题。
一、 RandomForest 基于预测器 { Classifier | Regressor } 属于所谓的集成方法的相当特定的角落,所以请注意,典型 方法,包括交叉验证,以同样的方式工作 至于其他 AI/ML 学习者。
随机森林 "inner"-logic works heavily with RANDOM-PROCESS , 其中样本 ( DataSET X ) 已知 y == { labels (用于分类器)| targets (对于回归器)} , 在整个森林代中 split ,其中树木得到 自举 通过 RANDOMLY 将 DataSET 分成树可以看到的部分和树将看不到的部分(从而形成内部 oob-subSET )。
除了对过拟合等人的敏感性的其他影响之外,随机森林 ensemble 不需要进行交叉验证,因为它在设计上不会过度拟合。许多论文还有 Breiman's (伯克利)经验证明为这种说法提供了支持,因为他们提供了证据,即 CV-ed 预测器将具有相同的 .oob_score_

import sklearn.ensemble
aRF_PREDICTOR = sklearn.ensemble.RandomForestRegressor( n_estimators = 10, # The number of trees in the forest.
criterion = 'mse', # { Regressor: 'mse' | Classifier: 'gini' }
max_depth = None,
min_samples_split = 2,
min_samples_leaf = 1,
min_weight_fraction_leaf = 0.0,
max_features = 'auto',
max_leaf_nodes = None,
bootstrap = True,
oob_score = False, # SET True to get inner-CrossValidation-alike .oob_score_ attribute calculated right during Training-phase on the whole DataSET
n_jobs = 1, # { 1 | n-cores | -1 == all-cores }
random_state = None,
verbose = 0,
warm_start = False
)
aRF_PREDICTOR.estimators_ # aList of <DecisionTreeRegressor> The collection of fitted sub-estimators.
aRF_PREDICTOR.feature_importances_ # array of shape = [n_features] The feature importances (the higher, the more important the feature).
aRF_PREDICTOR.oob_score_ # float Score of the training dataset obtained using an out-of-bag estimate.
aRF_PREDICTOR.oob_prediction_ # array of shape = [n_samples] Prediction computed with out-of-bag estimate on the training set.

aRF_PREDICTOR.apply( X ) # Apply trees in the forest to X, return leaf indices.
aRF_PREDICTOR.fit( X, y[, sample_weight] ) # Build a forest of trees from the training set (X, y).
aRF_PREDICTOR.fit_transform( X[, y] ) # Fit to data, then transform it.
aRF_PREDICTOR.get_params( [deep] ) # Get parameters for this estimator.
aRF_PREDICTOR.predict( X ) # Predict regression target for X.
aRF_PREDICTOR.score( X, y[, sample_weight] ) # Returns the coefficient of determination R^2 of the prediction.
aRF_PREDICTOR.set_params( **params ) # Set the parameters of this estimator.
aRF_PREDICTOR.transform( X[, threshold] ) # Reduce X to its most important features.
还应告知,默认值不是最好的,在任何情况下都不是最好的。关注问题域,提出一套合理的 ensemble 参数化,然后再进一步。

问:什么是好的 .oob_score_ ?
答:.oob_score_ 是随机的! . . . . . . .....是的,它必须(是随机的)
虽然这听起来像是一个挑衅的尾声,但不要放弃你的希望。
RandomForest ensemble 是一个很好的工具。特征中的分类值可能会带来一些问题( DataSET X ),但是,一旦您不需要与偏差或过度拟合作斗争,处理集成的成本仍然足够。 那太好了,不是吗?
由于需要能够在随后的重新运行中重现相同的结果,建议您(重新)设置 numpy.random & .set_params( random_state = ... ) 到 RANDOM-PROCESS 之前的已知状态(嵌入到 RandomForest 集成的每个引导中)。这样做,人们可能会观察到 的“降噪”进程。 RandomForest 基于更好的方向的预测器 .oob_score_ 而是由于更多集成成员( n_estimators )引入的真正改进的预测能力,较少约束的树构造( max_depthmax_leaf_nodes 等),而不仅仅是“运气好”在如何拆分数据集的随机过程中...
更接近更好的解决方案通常需要更多的树进入集成(RandomForest 决策基于多数票,因此 10-estimators 不是在高度复杂的 DataSET 上做出正确决策的重要基础)。超过 2000 的数字并不少见。可以迭代一系列大小调整(随机过程保持在状态完全控制下)以演示整体“改进”。
如果初始值为 .oob_score_ 下降大约 0.51 - 0.53 你的合奏是 比 RANDOM-GUESS 好 1% - 3%
只有在您使基于集成的预测器变得更好之后,您才可以进入一些关于特征工程等的额外技巧。
aRF_PREDICTOR.oob_score_    Out[79]: 0.638801  # n_estimators =   10
aRF_PREDICTOR.oob_score_ Out[89]: 0.789612 # n_estimators = 100

关于scikit-learn - sklearn 随机森林 : . oob_score_ 太低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24737304/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com