使用随机森林与scikit学习。 RF过度拟合数据并且预测结果很糟糕。
过度拟合不依赖于RF的参数: NBtree,Depth_Tree
Overfit会发生许多不同的参数(通过grid_search对其进行测试)。
补救: 我调整了初始数据/下采样的一些结果 为了影响拟合(手动预处理噪声样本)。
{{1}}
这个蒙特卡洛斯非常消耗, 只是想知道是否还有其他办法 随机森林的交叉验证? (即不是超参数优化)。
EDITED
答案 0 :(得分:27)
使用scikit-learn中的任何分类器进行交叉验证非常简单:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
clf = RandomForestClassifier() #Initialize with whatever parameters you want to
# 10-Fold Cross validation
print np.mean(cross_val_score(clf, X_train, y_train, cv=10))
如果您希望运行网格搜索,可以通过GridSearchCV类轻松完成。为此,您必须提供param_grid
,根据文档
带有参数名称(字符串)作为键和列表的字典 尝试作为值的参数设置,或此类词典的列表, 在这种情况下,列表中每个字典跨越的网格是 探讨。这样可以搜索任何参数序列 设置。
也许,您可以按如下方式定义param_grid
:
param_grid = {
'n_estimators': [5, 10, 15, 20],
'max_depth': [2, 5, 7, 9]
}
然后您可以使用GridSearchCV类,如下所示
from sklearn.model_selection import GridSearchCV
grid_clf = GridSearchCV(clf, param_grid, cv=10)
grid_clf.fit(X_train, y_train)
然后,您可以使用grid_clf. best_estimator_
获取最佳模型,使用grid_clf. best_params_
获取最佳参数。同样,您可以使用grid_clf.grid_scores_
希望这有帮助!