【问题标题】:Sklearn random forest model is too bigsklearn 随机森林模型太大
【发布时间】:2019-08-02 17:26:50
【问题描述】:

sklearn初学者的问题,请指教。 我使用以下参数训练了 RandomForestClassifier 模型:

n_estimators = 32,
criterion = 'gini',
max_depth = 380,

这个参数不是随机选择的,出于某种原因,它们表现出最好的性能......虽然我觉得很奇怪。

使用joblib.dumpcompress=3保存时,模型大小约为5.5GB

使用的数据是:

tfidf=TfidfVectorizer()
X_train=tfidf.fit_transform(X_train)

le=LabelEncoder()
le.fit(y_train)
y_train=le.fit_transform(y_train)

样本大小为 4.7Mio 记录拆分为 0.3(70% 训练,30% 测试)

现在,我有一个问题,也许有人可以帮忙:

模型使用的参数和模型大小相对于样本大小是否有意义?可能参数的选择对于增大尺寸的模型并不是最优的(我确实明白这里增大尺寸的主要参数是max_depth,但结果是最好的……)

也许对参数或数据准备有任何建议,根据我对这个示例的经验,我注意到以下几点: 1.增加n_estimators对结果几乎没有影响; 2.另一方面增加max_depth带来显着的改进。例如: - max_depth = 10 - accuracy_score 0.3 - max_depth = 380 - accuracy_score 0.95

非常欢迎任何建议,建议!:)

UPD。准确度结果

训练分数:0.988 classifier.score

OOB 分数:0.953 classifier.oob_score_

测试分数:0.935 sklearn.metrics -> accuracy_score

【问题讨论】:

  • 准确性分数是在测试集上计算的吗?
  • 你可能过拟合了 - 能否请你发布你的验证分数和训练分数?
  • @FChm 已更新,谢谢
  • @SeljukGülcan 已更新
  • 当您使用max_depth=10 或在它附近时,您遇到了多少准确性权衡?

标签: python scikit-learn random-forest


【解决方案1】:

尝试使用min_samples_leaf 代替 max_depth 来限制树的深度。这允许树的不同路径和不同的估计器有不同的深度。希望能够找到具有较低平均深度的良好性能的模型。 我喜欢将 min_samples_leaf 设置为浮点数,表示样本数的一小部分。尝试在 (0.0001, 0.1) 之间进行网格搜索

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 2017-05-14
    • 2016-07-23
    • 2018-10-09
    • 2018-11-24
    • 2019-03-14
    • 2020-01-16
    • 2017-10-19
    • 2019-07-10
    相关资源
    最近更新 更多