随机森林的特定交叉验证



我使用随机森林与scikit学习。RF过拟合数据,预测结果很差。

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

过拟合发生在许多不同的参数上(通过grid_search测试)。

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

Loop on random generation of RF fits, 
Get RF prediction on the  data for prediction
Select the model which best fits the "predicted data" (not the calibration data).

这个蒙特卡罗非常消费,只是想知道有没有别的办法随机森林交叉验证?(即不是超参数优化)。

编辑

scikit-learn中任何分类器的交叉验证都是微不足道的:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
# Initialize with whatever parameters you want to
clf = RandomForestClassifier()
# 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.cv_results_

获取网格分数

希望这对你有帮助!

相关内容

  • 没有找到相关文章

最新更新