python - sklearn 随机森林模型太大
问题描述
初学者的问题sklearn
,请指教。我已经RandomForestClassifier
使用以下参数训练了模型:
n_estimators = 32,
criterion = 'gini',
max_depth = 380,
这个参数不是随机选择的,出于某种原因,它们表现出最好的性能......虽然对我来说似乎很奇怪。
使用和保存时模型大小约为5.5GBjoblib.dump
compress=3
使用的数据是:
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
解决方案
尝试使用min_samples_leaf
而不是 max_depth 来限制树的深度。这允许树的不同路径和不同的估计器有不同的深度。希望能够找到具有良好性能且平均深度较低的模型。我喜欢将 min_samples_leaf 设置为浮点数,表示样本数的一小部分。在 (0.0001, 0.1) 之间尝试网格搜索
推荐阅读
- azure - 如何在 azure 管道中获取证书 serveruri
- javascript - ReactJS/Redux - Pure vs Impure Javascript 函数?
- java - 在创建具有盒装类型(例如整数)数组的张量与张量流中的基元数组时是否存在差异
- java - 在 java 中访问 JSONObject 中的键/值
- python-3.x - 如何忽略数据框中的空值并基于列构建新数据框
- python - 如何使用熊猫复制行(列)的元素并粘贴到csv中的第1行(另一列)?
- parsing - Terms for basic NLP/logical parsing example
- javascript - 检测父对象的窗口调整大小时排除子 jQuery 对象
- python - 使用 GradientTape 计算关于某些张量的预测梯度
- json - 通过在颤振中使用自定义 api 强制更新应用程序