随机森林的特定交叉验证

时间:2016-07-01 18:11:22

标签: scikit-learn

使用随机森林与scikit学习。 RF过度拟合数据并且预测结果很糟糕。

过度拟合不依赖于RF的参数:    NBtree,Depth_Tree

Overfit会发生许多不同的参数(通过grid_search对其进行测试)。

补救:     我调整了初始数据/下采样的一些结果     为了影响拟合(手动预处理噪声样本)。

{{1}}

这个蒙特卡洛斯非常消耗, 只是想知道是否还有其他办法 随机森林的交叉验证? (即不是超参数优化)。

EDITED

1 个答案:

答案 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_

获取网格分数

希望这有帮助!