为什么发生过度拟合时随机森林最大深度参数验证分数不会缩小

Why randomforest max depth parameter's validation score not shrink, when overfitting occur

我制作了随机森林模型,并将结果可视化。

#training code
from sklearn.datasets import load_digits
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

digits = load_digits()
forest_param = {'max_depth': np.arange(1,15),
               'n_estimators': [50, 100, 150, 200, 250, 300, 350, 400]}
forest_classifier = RandomForestClassifier()

forest_grid = GridSearchCV(forest_classifier, forest_param, n_jobs=-1, return_train_score=True, cv=10)
digit_data = digits.data
digit_target = digits.target
forest_grid.fit(digit_data, digit_target)

print("best forest validation score")
forest_grid.best_score_
#visualize code
def plot_search_results(grid, lsi_log_index):
    """
    Params: 
        grid: A trained GridSearchCV object.
    """
    ## Results from grid search
    results = grid.cv_results_
    means_test = results['mean_test_score']
    stds_test = results['std_test_score']
    means_train = results['mean_train_score']
    stds_train = results['std_train_score']

    ## Getting indexes of values per hyper-parameter
    masks=[]
    masks_names= list(grid.best_params_.keys())
    for p_k, p_v in grid.best_params_.items():
        masks.append(list(results['param_'+p_k].data==p_v))

    params=grid.param_grid

    ## Ploting results
    fig, ax = plt.subplots(1,len(params),sharex='none', sharey='all',figsize=(20,5))
    fig.suptitle('Score per parameter')
    fig.text(0.04, 0.5, 'MEAN SCORE', va='center', rotation='vertical')
    pram_preformace_in_best = {}
    for i, p in enumerate(masks_names):
        m = np.stack(masks[:i] + masks[i+1:])
        pram_preformace_in_best
        best_parms_mask = m.all(axis=0)
        best_index = np.where(best_parms_mask)[0]
        x = np.array(params[p])
        y_1 = np.array(means_test[best_index])
        e_1 = np.array(stds_test[best_index])
        y_2 = np.array(means_train[best_index])
        e_2 = np.array(stds_train[best_index])
        ax[i].errorbar(x, y_1, e_1, linestyle='--', marker='o', label='test')
        ax[i].errorbar(x, y_2, e_2, linestyle='-', marker='^',label='train' )
        ax[i].set_xlabel(p.upper())
    for log_scaler in lsi_log_index:
        ax[log_scaler].set_xscale("log")

    plt.legend()
    plt.show()
  
plot_search_results(forest_grid,[])

我想在发生过度拟合时缩小验证分数。
像这个 SVR_C 参数。 Image1
当发生过度拟合时,验证分数会缩小。

但是,当发生过拟合时,最大深度参数的验证分数不会缩小。 Image2

我了解到验证分数缩水,出现过拟合情况。
你能告诉我为什么会出现这种情况吗? :)

嗯,这完全取决于数据集。从您的 Image2 中,我们可以看到您的 RandomForestClassifier max_depth 没有过度拟合您的训练集。扩展树的深度,直到所有叶子都是纯净的或直到所有叶子包含少于 min_samples_split 个样本(默认为 2)。这些条件确保您的树木不会扩展到最大深度。因此你的模型没有过度拟合。

另一方面 SVR,一个大的 C 参数将确保所有样本都被正确分类。因此模型过度拟合。