python - Sklearn随机森林模型太大

标签 python scikit-learn random-forest

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 -> precision_score

最佳答案

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

关于python - Sklearn随机森林模型太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55118118/

相关文章:

python - 调用 if 语句,即使满足条件后也忽略

Python 如何一次遍历列表 100 个元素,直到到达所有元素?

python - 以下xgboost模型 TreeMap 中 'leaf'的值是什么意思?

scikit-learn - scikit-learn 中的随机森林分类器使用什么决策树算法

machine-learning - 在线设置中 scikit-learn 中使用 PassiveAggressiveClassifier 的正确方法

machine-learning - 具有分类值的 KNN 无法正确预测

python - 如何让 raw_input 重复直到我想退出?

python - 列表中是否有任何自引用列表或循环引用的用法,例如。将列表附加到自身

python-3.x - 如何获得每个组/模型的系数/截距,以便为每个组绘制拟合线?

python - LabelBinarizer 将多数类编码为 1 而不是 0