如何使用 Scikit Learn 调整随机森林中的参数?
How to tune parameters in Random Forest, using Scikit Learn?
class sklearn.ensemble.RandomForestClassifier(n_estimators=10,
criterion='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,
n_jobs=1,
random_state=None,
verbose=0,
warm_start=False,
class_weight=None)
我正在使用具有 9 个样本和大约 7000 个属性的随机森林模型。在这些样本中,我的分类器识别了 3 个类别。
我知道这远非理想条件,但我正在尝试找出哪些属性在特征预测中最重要。哪些参数最适合调整以优化特征重要性?
我尝试了不同的 n_estimators
并注意到 "significant features" 的数量(即 feature_importances_
数组中的非零值)急剧增加。
我已经通读了文档,但如果有人对此有任何经验,我想知道哪些参数最适合调整,并简要解释原因。
关键部分通常是三个要素:
- 估算器数量 - 通常森林越大越好,这里出现过拟合的可能性很小
- 每棵树的最大深度(默认none,导致整棵树)——减少最大深度有助于对抗过度拟合
- 每个拆分的最大特征(默认值
sqrt(d)
)- 你可能会尝试一下,因为它会显着改变整棵树的行为。 sqrt 启发式通常是一个很好的起点,但真正的最佳点可能在其他地方
根据我的经验,sklearn RandomForestClassifier 有三个值得探索的特性,按重要性排序:
n_estimators
max_features
criterion
n_estimators
真的不值得优化。你给它的估算器越多,它就会做得越好。 500 或 1000 通常就足够了。
max_features
值得探索许多不同的值。它可能对 RF 的行为有很大影响,因为它决定了 RF 中的每棵树在每次拆分时考虑了多少特征。
criterion
可能会有一点影响,但通常默认就可以了。有空的话试试看吧
确保在尝试这些参数时使用 sklearn 的 GridSearch(最好是 GridSearchCV,但您的数据集太小)。
不过,如果我没有正确理解你的问题,你只有 9 个样本和 3 个 classes?大概每个 class 有 3 个样本?除非它们是好的、有代表性的记录,否则您的 RF 很可能会过度拟合那么少量的数据。
This精彩文章详细解释了可调参数、如何跟踪性能与速度的权衡、一些实用技巧以及如何执行网格搜索。
n_estimators
是别人说的好。增加的时候也很好处理过拟合。
但我认为min_sample_split
在处理小样本但大特征数据集中发生的过度拟合时也很有帮助。
class sklearn.ensemble.RandomForestClassifier(n_estimators=10,
criterion='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,
n_jobs=1,
random_state=None,
verbose=0,
warm_start=False,
class_weight=None)
我正在使用具有 9 个样本和大约 7000 个属性的随机森林模型。在这些样本中,我的分类器识别了 3 个类别。
我知道这远非理想条件,但我正在尝试找出哪些属性在特征预测中最重要。哪些参数最适合调整以优化特征重要性?
我尝试了不同的 n_estimators
并注意到 "significant features" 的数量(即 feature_importances_
数组中的非零值)急剧增加。
我已经通读了文档,但如果有人对此有任何经验,我想知道哪些参数最适合调整,并简要解释原因。
关键部分通常是三个要素:
- 估算器数量 - 通常森林越大越好,这里出现过拟合的可能性很小
- 每棵树的最大深度(默认none,导致整棵树)——减少最大深度有助于对抗过度拟合
- 每个拆分的最大特征(默认值
sqrt(d)
)- 你可能会尝试一下,因为它会显着改变整棵树的行为。 sqrt 启发式通常是一个很好的起点,但真正的最佳点可能在其他地方
根据我的经验,sklearn RandomForestClassifier 有三个值得探索的特性,按重要性排序:
n_estimators
max_features
criterion
n_estimators
真的不值得优化。你给它的估算器越多,它就会做得越好。 500 或 1000 通常就足够了。
max_features
值得探索许多不同的值。它可能对 RF 的行为有很大影响,因为它决定了 RF 中的每棵树在每次拆分时考虑了多少特征。
criterion
可能会有一点影响,但通常默认就可以了。有空的话试试看吧
确保在尝试这些参数时使用 sklearn 的 GridSearch(最好是 GridSearchCV,但您的数据集太小)。
不过,如果我没有正确理解你的问题,你只有 9 个样本和 3 个 classes?大概每个 class 有 3 个样本?除非它们是好的、有代表性的记录,否则您的 RF 很可能会过度拟合那么少量的数据。
This精彩文章详细解释了可调参数、如何跟踪性能与速度的权衡、一些实用技巧以及如何执行网格搜索。
n_estimators
是别人说的好。增加的时候也很好处理过拟合。
但我认为min_sample_split
在处理小样本但大特征数据集中发生的过度拟合时也很有帮助。